【发布时间】:2022-07-08 01:38:21
【问题描述】:
我正在研究一个无需身份框架即可执行身份验证/授权的 Web api。
program.cs 文件的认证配置如下:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => ....
登录控制器操作使用用户的登录名设置 JWT 令牌并将其返回给调用者。每个其他控制器操作都具有 [Authorize] 或 [AllowAnonymous] 属性来控制访问。
我的任务是向这个 web api 添加基于角色的授权。例如,我可以将 [Authorize(Roles = "Administrator")] 用于管理控制器操作。在数据库用户表中,我创建了角色列作为用户角色的占位符;从而执行基于角色的授权。
我正在查看此链接:https://docs.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-6.0 - 但这是关于使用身份时基于角色的授权。但我没有使用身份框架。
我正在考虑的一个解决方案是 - 在登录期间,将角色写入 JWT 令牌,然后为每个角色编写一个属性(将应用于相应的控制器操作),以便比较 JWT 令牌中的角色。
基于角色的授权是否依赖于 .net 身份?或者我可以简单地将 Role 或 Claim 的值设置为 JWT 令牌(在登录期间)并通过通常的 [Authorize(Roles = "Administrator")] 自动执行基于角色的授权,这是否支持?任何关于此的简单示例或参考都会有所帮助。
【问题讨论】:
-
不是基于身份的,不是。如果您有适当的声明,它应该可以工作。
-
docs.microsoft.com/en-us/dotnet/api/… -- 如果早上没有人回答,我会提供答案。
-
所以在登录控制器中,当我生成 JWT 令牌时,我是简单地设置
Role还是在声明中设置角色?我读过一个身份可以有声明,并且一个角色也可以有声明。 -
角色是特定类型或声明。登录用户由具有声明的身份表示。
-
你能给我指点关于这个主题的文章吗,会很有帮助的。我想了解这一点 - 用户可以拥有声明和角色,角色可以拥有声明,而您所说的用户(身份)可以拥有声明,但我知道它也可以拥有可以拥有声明的角色,我需要澄清这个话题。
标签: c# .net asp.net-core asp.net-core-webapi asp.net-core-6.0