繁体   English   中英

在 ASP.Net 应用程序上结合 ADFS 身份验证和 JWT Bearer

[英]Combine ADFS Authentication and JWT Bearer on ASP.Net Application

我有一个用 ASP.NET 编写的 Web API 和用 Angular 编写的前端。 API 端的身份验证可以配置为使用 Windows 身份验证、ADFS 身份验证或 JWT 承载。 但对于特定部署,仅支持一种类型的身份验证。

对于 ADFS 身份验证,我在 Angular 一侧使用了angular-oauth2-oidc

在 API 方面,这就是我在startup.cs文件中配置 ADFS 身份验证的方式。

    public void ConfigureAuth(IAppBuilder app)
    {
        app.UseActiveDirectoryFederationServicesBearerAuthentication
            (new ActiveDirectoryFederationServicesBearerAuthenticationOptions
            {
                BackchannelCertificateValidator = new CertificateValidator(),
                MetadataEndpoint = System.Configuration.ConfigurationManager.AppSettings["ida:ADFSMetadata"],
                TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidAudience = System.Configuration.ConfigurationManager.AppSettings["ida:Audience"],
                    ValidIssuer = System.Configuration.ConfigurationManager.AppSettings["ida:ValidIssuer"]
                },
                Provider = new OAuthBearerAuthenticationProvider()
                {
                    OnValidateIdentity = async context =>
                    {
                        var identity = context.Ticket.Identity;
                        var emailAddress = identity.FindFirst(ClaimTypes.Email).Value;
                        using (AuthRepository repo = new AuthRepository())
                        {
                            var userManager = repo.GetUserManager();
                            var aspNetUser = userManager.FindByEmailAsync(emailAddress).GetAwaiter().GetResult();
                            if (aspNetUser != null)
                            {
                                identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, aspNetUser.Id));
                                await ProfileManager.AddClaimsToIdentity(identity, aspNetUser.SelectedProfile);
                            }
                        }
                    }
                }
            });
    }

我想要的是将 ADFS 身份验证与 JWT Bearer 相结合,如果输入的电子邮件地址与我的公司域(如“email@mycompany.com”)相关联,则它会针对 ADFS 进行身份验证,如果是任何其他电子邮件,它会使用JWT 承载身份验证。

我知道可以在 ASP.NET Core 中组合不同类型的身份验证( 此处的示例),但我的 API 不是使用 Core 构建的。

我试图为 ASP.NET 找到相同的功能,但我找不到。 我想知道这是否可以实现,如果可以,如果有人能给我指点,我将不胜感激。

关于这个问题:

我想要的是将 ADFS 身份验证与 JWT Bearer 相结合,如果输入的电子邮件地址与我的公司域(如“email@mycompany.com”)相关联,则它会针对 ADFS 进行身份验证,如果是任何其他电子邮件,它会使用JWT 承载身份验证。

据我所知,这是可能的。

您是否尝试过 Microsoft 身份平台? 这是用于管理身份的特定 Azure SDK,包括对 Windows Server 2012 及更高版本中的 ADFS 3.0 的支持。 它也更易于使用,因为此 MIcrosoft Identity Platform 使用 OpenIDConnect 和 OAuth 2.0,因此您可以使用具有 JWT 承载的 ADFS。

这是官方文档页面: https : //docs.microsoft.com/en-us/azure/active-directory/develop/

登陆页面有各种示例供您入门。 由于您使用的是 .NET Core,Microsoft Identity Platform SDK 有您可以使用的示例是使用 .NET Core 的示例: https : //docs.microsoft.com/en-us/azure/active-directory/develop/quickstart -v2-aspnet-core-webapp

这是一个 github 存储库,其中包含该教程旁边的各种示例: https : //github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2

更新 1:Windows Server 2016 中 ADFS 的当前文档仅显示对 OAuth2/OpenIDConnect 的支持,并且它使用的是 JWT Bearer: https ://docs.microsoft.com/en-us/windows-server/identity/ad-fs/ 开发/ad-fs-openid-connect-oauth-concepts

我在MS官方文档中搜索了特定的“ADFS Bearer Token Authentication”,完全没有。 当前的所有文档都提到 ADFS 3.0 及更高版本(包括 Windows Server 2016 和 2019 中的 ADFS)正在使用 OAuth2/OpenIDConnect。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM