【问题标题】:ASP.NET Core PermissionsASP.NET Core 权限
【发布时间】:2017-11-06 05:54:04
【问题描述】:

我对管理用户可以做什么和不能做什么的所有选项感到迷茫。 我从角色开始:[Authorize(Roles = Constants.Roles.ModeratorAndUp)]。其中 ModeratorAndUp 是字符串 "Moderators, Administrators"
但我需要更灵活的方法。在过去的 3 个小时里,我正在阅读有关索赔和许可的信息。我还发现了这个有趣的博客post

我正在使用 Angular 和 ASP.NET Core 以及 Universal 模板。对于身份验证,我使用OpenIddict我在看一本书。

我想使用 JWT 令牌进行授权和身份验证。我不知道在 .NET Core 中应该如何处理权限,但我有 100 个不同的角色,而且一团糟。而且当我创建新用户时,我需要手动添加大约 20 个角色。如果我可以创建具有角色/权限的组,然后将用户添加到该组,那就太好了。但不知道这个设计将如何与 OpenIdDict 和 JWT 令牌授权一起使用。

谁能指出我正确的方向,然后我会自己研究。
我不确定我是否应该构建一些系统来在我更改组权限/角色时自动更新用户角色,我是否应该使用声明...我想使用[Authorize] 属性,因为它确实简化了事情。

什么/如何/哪个是在 ASP.NET Core 中进行 JWT Token 身份验证/授权的最佳实践。

【问题讨论】:

  • 将角色视为一组声明,然后您就会知道如何解决它
  • But don't know how this design will play with OpenIdDict and JWT token authorisation.: 在 OpenIddict 中使用声明与在 cookie 中间件中使用声明完全没有区别(在幕后,授权堆栈不取决于您对用户进行身份验证的方式,所以相同概念适用于 cookie 和令牌)。正如@ssmith 所建议的那样,我还将获得特权/权限。如果您认为最终在令牌中添加了太多声明,请不要错过 stackoverflow.com/questions/42496306/…

标签: asp.net-core openiddict


【解决方案1】:

将声明视为比角色更灵活的东西。也就是说,如果您有复杂的业务规则,不一定简单地映射到用户所属的组,您可以将您的权限封装到 Privileges(其职责是确定给定用户是否对给定资源具有特定权限的类。在此处查看更多信息:http://ardalis.com/favor-privileges-over-role-checks

根据我的经验,这往往会减少 UI 层中的大量条件复杂性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2018-12-27
    相关资源
    最近更新 更多