使用 ADFS 的 JWT Bearer 身份验证将 ASP.NET Framework 迁移到 ASP.NET Core 3.1

Posted

技术标签:

【中文标题】使用 ADFS 的 JWT Bearer 身份验证将 ASP.NET Framework 迁移到 ASP.NET Core 3.1【英文标题】:Migrate ASP.NET Framework to ASP.NET Core 3.1 with JWT Bearer authentication from ADFS 【发布时间】:2020-05-25 22:31:21 【问题描述】:

ASP.NET 框架

我们有一个现有的 ASP.NET Framework 网站,它使用 ActiveDirectoryFederationServicesBearerAuthentication 进行身份验证:

    app.UseActiveDirectoryFederationServicesBearerAuthentication(
            new ActiveDirectoryFederationServicesBearerAuthenticationOptions
            
                MetadataEndpoint = ConfigurationManager.AppSettings["ida:AdfsMetadataEndpoint"],
                TokenValidationParameters =
                    new TokenValidationParameters
                    
                        ValidAudience = ConfigurationManager.AppSettings["ida:Audience"],
                        RequireSignedTokens = true
                    
            );

“ida:AdfsMetadataEndpoint”的值为:

https:///FederationMetadata/2007-06/FederationMetadata.xml

我们有一个 ADFS 3.0 服务器(在 Windows Server 2012 R2 上运行)发布这些 JWT 令牌。

ASP.NET Core 3.1

由于我们正在将我们的网络服务器迁移到 ASP.NET Core 3.1,我们希望继续使用相同的 ADFS 3.0 服务器向我们的网站颁发 JWT 令牌。

但我在配置新服务器以验证来自 ADFS 3.0 服务器的令牌时遇到问题。这是我尝试过的:

JwtBearerAuthentication

据我了解,JwtBearerAuthentication 需要支持 OpenIDConnect 的 ADFS 4.0?

我找到了this 解决方法,它应该适用于我的情况,但是将颁发者签名密钥存储在我的应用程序中似乎有点麻烦。如果它在 ADFS 上发生变化怎么办?

WsFederationAuthentication

我关注了这个guide,但在我看来这不支持承载认证?

结论

使用 ADFS 3.0 发布的 JWT 不记名令牌的 ActiveDirectoryFederationServicesBearerAuthentication 的 ASP.NET Core 等效项是什么?

【问题讨论】:

【参考方案1】:

ADFS 2012 R2 可以发布 JWT 令牌,但不支持 OIDC 发现它不使用 openid 连接发现规范公开元数据。因此,您可以在 asp.net core web api 中使用AddJwtBearer 扩展名,但需要手动配置颁发者、受众和签名密钥作为您提供的解决方法和here 显示。当然,如果您可以将您的 ADFS 实例升级到“4.0”,这将使该场景更易于实施。

【讨论】:

我决定使用解决方法来提供颁发者、受众和签名密钥,这样服务器就不需要从 ADFS 元数据中获取这些。感谢您的确认!

以上是关于使用 ADFS 的 JWT Bearer 身份验证将 ASP.NET Framework 迁移到 ASP.NET Core 3.1的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT Bearer 令牌进行身份验证 Swagger

如何使用 OWIN Jwt Bearer Authentication 记录身份验证结果

使用 JWT Bearer 进行身份验证不起作用,调试表明问题出在 GetToken() 函数内部

在 Spring Boot 中成功 Oauth2 登录后 Cookie 身份验证而不是 JWT Bearer Token

未从 ADFS 3.0 获取用于 OAuth2 访问令牌的 JWT 中的用户身份

从 ASP.NET vNext beta5 移动到 beta7 后 JWT Bearer 令牌身份验证错误