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

时间:2020-02-10 15:12:46

标签: authentication asp.net-core jwt adfs3.0

ASP.NET Framework

我们有一个现有的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迁移Web服务器时,我们希望继续使用同一ADFS 3.0服务器向我们的网站发行JWT令牌。

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

JwtBearerAuthentication

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

我发现this的解决方法适用于我的情况,但是将发行者签名密钥存储在我的应用程序中似乎有点hack。如果在ADFS上发生更改怎么办?

WsFederationAuthentication

我遵循了这个guide,但是在我看来,这不支持Bearer身份验证?

结论

使用从ADFS 3.0发出的JWT承载令牌的ActiveDirectoryFederationServicesBearerAuthentication的ASP.NET Core等效项是什么?

1 个答案:

答案 0 :(得分:0)

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