c# - 在 ASP.Net 应用程序上结合 ADFS 身份验证和 JWT 承载
问题描述
我有一个用 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。
推荐阅读
- javascript - Edge中的jquery和输入事件
- java - 应用重启后 Firebase 磁盘持久性不起作用
- node.js - 在 NodeJS 应用程序中的应用程序消息传递中
- php - Docker phpmyadmin 忽略了我的 php.ini 配置
- php - 如果出现 Dropzone 错误,如何发出警报?
- hashicorp-vault - Vault:获取当前后端
- facebook - Facebook Api Marketing : (#3) 应用程序没有能力进行此 API 调用
- javascript - 无法使用 JS 在单页应用程序中读取未定义的属性“名称”
- php - mysql查询从第二天下午4点到早上6点选择注册用户,然后从早上6点到下午4点再次选择注册用户
- ssas - 引用关系 sql server 分析服务,我如何创建它