asp.net - 使用 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
我是否应该只创建一个单独的数据库来存储具有角色的用户,然后在他访问网站时手动检查并添加这些角色?
解决方案
处理这种情况的多种方法——您可以选择将有关用户的信息存储在自定义属性中,这些属性可以根据您控制的逻辑(而不是用户)分配值。在发布 id_token 时,您将这些自定义属性作为角色发送回应用程序。
或者,您可以选择拥有一个单独的数据库来存储用户到角色的映射。在登录时,您可以对数据库进行 REST-API 调用以读取分配给用户的角色并将其在 id_token 中发回。
我倾向于第二种方法,因为它提供了更好的关注点分离和自由设计最适合您的基于角色的系统。
推荐阅读
- ruby-on-rails - 在思考 sphinx 中如何检查关联文件不为 NULL?
- php - 扩展 Symfony 以自动转义 .tex.twig 文件的乳胶字符
- json - jq 将重复项与嵌套对象结合起来
- java - 如何使用 selenium 访问多个 html 表列数据
- javascript - JavaScript 中的 Unicode 正则表达式
- spring-integration - http 入站网关的最大正文大小
- spring - spring cloud data flow streaming Source null问题
- amazon-web-services - 在 Go 中为 AWS Lambda 指定多个事件处理程序
- tcl - 选择单选按钮或比例
- javascript - 在模式前添加断线