【发布时间】:2019-01-13 11:55:02
【问题描述】:
我有一个 .net core 2.0 WebAPI,我使用 JWT 作为 HttpOnly cookie 来保护它。 我现在正在尝试为每个端点实现基于位的权限级别,并且我正在尝试了解它是否可以在 JWT cookie 中完成。 例如,我有一个基本的访问级别枚举:
[Flags]
public enum AccessLevel
{
Read = 1,
Write = 2,
Modify = 4,
Delete = 8,
FullControl = 15
}
我可以像这样向我的令牌添加声明吗:
var claims = new List<Claim>
{
new Claim("StudentsAccessLevel", "3"),
new Claim("CoursesAccessLevel", "7")
};
并以某种方式在我的StudentsController 中使用它:
public class StudentsController : Controller
{
[HttpPost]
//obviously this is not the syntax, but is there a syntax that can be used like that?
[Authorize("StudentsAccessLevel" & 1 > 0)]
public IActionResult Create() { }
[HttpGet]
[Authorize("StudentsAccessLevel" & 2 > 0)]
public IActionResult Read() { }
[HttpPut]
[Authorize("StudentsAccessLevel" & 4 > 0)]
public IActionResult Update() { }
[HttpDelete()]
[Authorize("StudentsAccessLevel" & 8 > 0)]
public IActionResult DeleteAsync() { }
}
【问题讨论】:
-
因此,您可以直接从文档中获取有关处理索赔的更多信息。这是一个链接:docs.microsoft.com/en-us/aspnet/core/security/authorization/… 如果这还不够,请告诉我
-
@rahicks,感谢您的链接,但这与我正在寻找的具有操作访问级别的实现不太匹配。在链接中描述的方法中,我必须为每个操作(创建、读取、更新、删除)添加一个声明。
-
不确定这是否是最好的方法,但我会尝试的第一件事是覆盖授权属性 [docs.microsoft.com/en-us/previous-versions/aspnet/…] 并使其适用于您的声明
-
@rahicks,您的链接出现 404 错误...也许我可以使用这个 using-a-func-to-fulfill-a-policy
-
是的,我在最后添加 ] 应该没问题
标签: c# jwt asp.net-core-webapi