。AzuerAD身份验证后的.NET Core添加声明

问题描述 投票:0回答:1

我的应用程序通过AzureAD登录,但是现在我需要从数据库获取信息,然后将角色存储为声明。

所以我的问题是:如何在身份验证后将角色存储为声明?

这是我尝试过的:

var user = User as ClaimsPrincipal;
var identity = user.Identity as ClaimsIdentity;
identity.AddClaim(new Claim(ClaimTypes.Role, "Admin"));  

但是当我转到另一个控制器时,该索偿不再存在了吗?

谢谢

.net asp.net-core .net-core claims-based-identity microsoft-identity-platform
1个回答
1
投票

[您可以在身份验证期间实现这一点,在OIDC中间件中,OnTokenValidated使您有机会修改从传入令牌获得的ClaimsIdentity,以下代码供您参考:

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => Configuration.Bind("AzureAd", options));


services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Events = new OpenIdConnectEvents
    {
        OnTokenValidated = ctx =>
        {
            //query the database to get the role

            // add claims
            var claims = new List<Claim>
            {
                new Claim(ClaimTypes.Role, "Admin")
            };
            var appIdentity = new ClaimsIdentity(claims);

            ctx.Principal.AddIdentity(appIdentity);

            return Task.CompletedTask;
        },
    };
});

然后在控制器中,您可以像这样获得索赔:

var role = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Role)?.Value;
© www.soinside.com 2019 - 2024. All rights reserved.