c# - access_token / id_token 没有角色信息,可以在令牌中添加其他信息而不是检查每个页面吗?
问题描述
我有一个带有 API(网络核心)的 React 项目。我的网站菜单/字段将根据Role
用户的显示/隐藏。用户将通过外部 oidc 登录我的网站。
但是,access_token
来自id_token
oidc 的 and 没有Role
信息,它只有它们的email
,我将使用它们来检查我的数据库以确定哪个Role
是登录用户。目前我有一个Role
基于他们的API access_token
,所以它就像
public string getRoles(string access_token)
{
//check Database
return role;
}
几乎每个页面都会调用这个函数,所以我想知道有没有更有效的方法来做到这一点?
解决方案
当使用数据库中的角色确认登录时,您需要将声明添加到 HttpContext.User 。当您在启动时定义此连接时,请务必处理 OnTokenValidated 事件。
.AddOpenIdConnect("oidc", options =>
{
options.Events = new OpenIdConnectEvents
{
OnTokenValidated = async ctx =>
{
var claim = new Claim("Role", "TheirRole");
var identity = new ClaimsIdentity(new[] { claim });
ctx.Principal.AddIdentity(identity);
await Task.CompletedTask;
}
};
}
然后你可以像这样在控制器(或任何有 HttpContext 的地方)中访问它
var claim = HttpContext.User.Claims.First(c => c.Role == "TheirRole");
推荐阅读
- laravel - Laravel 通知 - 延迟电子邮件发送并在条件满足时取消
- sql - 用于删除具有不同条件的多个值的 SQL 窗口函数
- html - 调整大小时对齐项目
- dynamics-crm - 从 Microsoft Flow 中的营销列表 (Dynamics CRM) 中获取所有联系人
- vue.js - 如何在 nuxt 页面 validate() 中访问当前实例?
- javascript - 将服务器端数据共享到 JS 文件
- c# - 检查要归档的 pdf 内容以发现 pdf 受密码保护
- excel - 根据 A 列数据将不同数量的 B 列单元格中的数据转换为单个逗号分隔的行
- javascript - VueJS忽略全局导入
- rust - 如何返回 &str 的向量?