【发布时间】:2019-07-01 06:38:25
【问题描述】:
我这几天一直在学习 Asp.Net Identity,我熟悉用[Authorize(Roles = "Admin")] 或[Authorize(Policy = "OnlyAdminAndModerators")] 来授权控制器。
我正在使用 JWT 令牌,当通过“[Authorize(Roles = "Admin")]”进行授权时,我所要做的就是在我的令牌上设置一个角色类型,如下所示:
{
"nameid": "a173e923-1808-4d7d-2b64-08d684882677",
"unique_name": "yuri",
"role": [
"Admin",
"Moderator"
],
"nbf": 1549522727,
"exp": 1549609127,
"iat": 1549522727
}
有了这个,我的控制器能够通过json 上的“角色”名称和“Admin”的值进行身份验证。
我听说可以在 Identity AspNetRole 表上创建一个角色,通过 AspNetRoleClaims 表将声明与该角色相关联,例如 Admin 会有“CanAdd”声明,然后在 Startup 类上,我可以创建一个策略,比如 options.AddPolicy("Add Role", policy => policy.RequireClaim("CanAdd", "AddClaim"));
最后我可以继续我的控制器,使用[Authorize(Policy = "Add Role")] 设置一个方法,控制器将授权任何具有管理员角色的用户,因为他将拥有 CanAdd 声明。
抱歉,我知道这是个大问题,但我真的很想完成这项工作。
提前致谢。
【问题讨论】:
-
这是否涵盖了您的问题? benfoster.io/blog/asp-net-identity-role-claims
-
嘿,谢谢你的链接,它给了我一些想法,但它并没有给我我想要的东西。我的问题是,由于我正在检查 JWT 令牌中的权限,因此该令牌需要对其声明。我想要的是令牌上只有角色,然后在控制器上的 [Authorize] 属性上,权限将由角色声明。但由于令牌仅在控制器上验证之前具有角色,因此系统需要以某种方式访问数据库并检查是否存在与该角色关联的所需声明。
-
对于我搜索的内容,我发现有人在 Asp.Core MVC 上执行此操作,但我没有找到使用 API 和令牌执行此操作的方法。
标签: c# asp.net-core jwt asp.net-identity