使用天蓝色AzureADB2C进行身份验证时,我想将自定义声明添加到“声明原则”的门户网站中
current code in start up
services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
.AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options));
我当时以为它应该像这样工作,但是在经过验证的令牌上永远不会被击中
services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
.AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options))
.AddJwtBearer(o =>
{
o.Events = new JwtBearerEvents
{
OnTokenValidated = async ctx =>
{
var claims = new List<Claim> { new Claim("ConfidentialAccess", "true") };
var appIdentity = new ClaimsIdentity(claims);
ctx.Principal.AddIdentity(appIdentity);
}
};
});
答案 0 :(得分:1)
通常,我们将使用OpenIdConnect中间件进行AAD身份验证。您可以使用以下代码行添加自定义声明。
//OpenIdConnectOptions
options.Events = new OpenIdConnectEvents
{
OnTokenValidated = context =>
{
var claimsIdentity = (ClaimsIdentity)context.Principal.Identity;
//add your custom claims here
claimsIdentity.AddClaim(new Claim("test", "helloworld!!!"));
return Task.FromResult(0);
}
};
如果您通过安装软件包AzureADB2CAuthenticationBuilderExtensions.AddAzureADB2C使用Microsoft.AspNetCore.Authentication.AzureADB2C.UI,则我认为没有办法设置OpenIdConnectEvents.OnTokenValidated。
在AzureAdB2CAuthenticationBuilderExtensions.cs中,您可以在AddAzureADB2C
方法下找到用于实例化OpenIdConnectOptions
的代码行。
builder.Services.TryAddSingleton<IConfigureOptions<OpenIdConnectOptions>, OpenIdConnectOptionsConfiguration>();
对于OpenIdConnectOptionsConfiguration.cs,您可能发现没有机会设置OpenIdConnectOptions.Events
。
幸运的是,这是一个代码示例,分别定义了AzureAdB2COptions.cs和OpenIdConnectOptionsSetup.cs。我假设您可以按照我的代码段修改OpenIdConnectOptionsSetup.cs下的Configure
方法来满足您的要求。您可以关注An ASP.NET Core web app with Azure AD B2C的详细教程。