【问题标题】:Protect ASP.NET WebAPI in .NET 4.7.X with IdentityServer 4 Jwt使用 IdentityServer 4 Jwt 保护 .NET 4.7.X 中的 ASP.NET WebAPI
【发布时间】:2021-03-01 06:12:12
【问题描述】:

所以,我在 .NET Core 3.1 项目中设置了 IdentityServer 4。我有 Web 应用程序,还有 .NET Core 3.1 通过 OpenId Connect (oidc) 登录用户。完美运行。

但我还在 .NET Framework 4.7.2 中创建了另一个 ASP.NET WebAPI 项目,我想让用户使用我的 IdentityServer 4 创建的 Bearer 令牌对其进行身份验证。

如果该项目也是 .NET Core,那将完美运行。但事实并非如此。它是 .NET 4.7.2,我能找到的所有示例都使用带有“UseIdentityServerAuthentication”的 .NET Core,这在 .NET 4.7.2 中不可用。或者我找到使用“IdentityServerBearerTokenAuthenticationOptions”的示例,但这需要用于 IdentityServer 3 的 NuGet,并且似乎不支持由 IdentityServer 4 创建的 Jwt 令牌(或者我理解 - 可能不正确)。

有人可以在这里把我推向正确的方向吗? WebAPI 项目需要是 .NET Framework 4.7.2,这是技术要求。

【问题讨论】:

    标签: asp.net asp.net-core asp.net-web-api identityserver4 identityserver3


    【解决方案1】:

    您与IdentityServerBearerTokenAuthenticationOptions 走在正确的轨道上。您需要在 API 项目中使用IdentitySever3.AccessTokenValidation。 IdentityServer4 生成令牌的问题是它们的类型是at+jwt,但您的 API 上需要 JWT,您可以像这样轻松更改 IdentityServer 上的类型

    var builder = services.AddIdentityServer(                
                    options =>
                    {
                        options.AccessTokenJwtType = "JWT";
                    })
    

    在此过程中您可能还有其他问题,我建议您阅读我的博客,用 IdentityServer4 和 .NET 4.5.2 https://nahidfa.com/posts/identityserver4-and-asp-.net-web-api/对此进行解释

    【讨论】:

    • 酷,我会试试的。我偶然发现“options.EmitStaticAudienceClaim = true;”在“AddIdentityServer”中。您是否知道 IdentityServer 4 中的相关信息,是否应该添加?它似乎在我的 JWT 令牌中的“aud”下添加了第二个条目,该条目保存了身份服务器 /resources 的地址。
    • 是的,您需要添加静态资源以使其与您的 API 一起使用,默认情况下它已添加到 IDS4 项目模板中。你用的是什么版本的IDS4?试试我的博客,它对更深入地了解问题非常有用,如果您在调整版本时遇到问题,我可以帮助您提供示例代码
    猜你喜欢
    • 2020-05-28
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多