我正在从使用Microsoft.Owin.Security.ActiveDirectory
库对承载令牌进行身份验证的 .NET Framework 应用程序迁移到使用这些Microsoft.AspNetCore.Authentication
库的 .NET 5。
我的旧代码如下:
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["AzureActiveDirectoryTenant"],
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings["AzureActiveDirectoryAudience"]
},
Provider = new AzureOAuthBearerAuthenticationProvider(container.Resolve<IUserService>())
});
然后我实现了一个OAuthBererAuthenticationProvider
向用户附加声明的方法。
public class AzureOAuthBearerAuthenticationProvider : OAuthBearerAuthenticationProvider
{
public AzureOAuthBearerAuthenticationProvider(IUserService userService)
{
OnValidateIdentity = async (context) =>
{
var userPrincipalName = context.Ticket.Identity.Name;
var roles = await userService.GetRolesForUserAsync(userPrincipalName);
context.Ticket.Identity.AddClaims(roles);
};
}
}
我的新代码如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"));
}
这可以验证传递给 API 的令牌。但是,没有附加任何角色。如何修改此配置以便附加我的用户角色?