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

Can we use Azure AD and issue our own token to client side?

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

勾选,可以在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 authorization or Policy-based authorization, and you could also create Custom Authorization attributes 来进行身份验证。