我们可以使用 Azure AD 并向客户端发出我们自己的令牌吗?

时间:2021-06-21 12:34:15

标签: azure-active-directory jwt asp.net-core-webapi asp.net-core-3.1

我有问题。我的前端和后端都使用 azure 广告。前端使用angular。 FE 将连接到 azure AD 并将令牌传递给我们的 api。我们的 api 将验证来自 FE 的令牌。然后我将检查来自 azure ad 的用户电子邮件。如果我们的数据库中不存在用户。我会在我的数据库中添加一个新的。所以现在我不想在 azure 广告中使用角色管理。我可以自己发行另一个令牌而不是使用 azure 广告吗?问题是,当我想在我的数据库中使用角色表授权我的 api 时。我不能简单地 [Authorize("Admin")] 因为这将检查 azure 令牌中的角色声明。我想在我的数据库中使用我的角色。所以我能想到的其他解决方案是创建自定义授权属性,但这可能不是最佳解决方案,因为它会在每个请求中搜索 db 中的用户角色。所以现在如果有人像我的问题一样有经验,请随时提出建议。谢谢

1 个答案:

答案 0 :(得分:0)

勾选this thread,您可以在 OIDC 事件的 OnTokenValidated 中添加自定义声明:

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


services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Events = new OpenIdConnectEvents
    {
        OnTokenValidated = ctx =>
        {


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

            ctx.Principal.AddIdentity(appIdentity);

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

然后,您可以创建 Claims-based authorizationPolicy-based authorization,还可以创建 Custom Authorization attributes 来进行身份验证。

相关问题