首页 > 解决方案 > 使用 Azure AD B2C 时,我应该在哪里存储我的 aspnet 核心网站的声明和角色

问题描述

所以我关注了https://about-azure.com/using-azure-ad-b2c-with-angular-8/,现在可以登录我的 Angular 站点并访问具有 [Authorize] 属性的控制器。

但为了让这更有用,我需要管理员、付费、全局管理员角色/策略,这样我才能做到

services.AddAuthorization(options =>
            {
                options.AddPolicy("AdminOnly", policy => policy.RequireClaim("IsAdmin"));
            });

[Authorize(Policy = "AdminOnly")]

或者

[Authorize(Roles= "IsAdmin")]

但是我在任何地方都找不到任何关于我应该如何以及在哪里存储每个用户的信息的教程,我认为这些额外的声明应该存储在 AD B2C 中,但是当我浏览https://portal.azure时我找不到任何东西.com/#blade/Microsoft_AAD_B2CAdmin/TenantManagementMenuBlade/overview

我是否应该只创建一个单独的数据库来存储具有角色的用户,然后在他访问网站时手动检查并添加这些角色?

标签: asp.netasp.net-coreazure-active-directoryazure-ad-b2c

解决方案


处理这种情况的多种方法——您可以选择将有关用户的信息存储在自定义属性中,这些属性可以根据您控制的逻辑(而不是用户)分配值。在发布 id_token 时,您将这些自定义属性作为角色发送回应用程序。

或者,您可以选择拥有一个单独的数据库来存储用户到角色的映射。在登录时,您可以对数据库进行 REST-API 调用以读取分配给用户的角色并将其在 id_token 中发回。

我倾向于第二种方法,因为它提供了更好的关注点分离和自由设计最适合您的基于角色的系统。


推荐阅读