c# - 在 .NET Core 2.0 中使用 JWT 基于权限访问资源

标签 c# asp.net asp.net-core jwt asp.net-core-2.0

我有一个使用 .NET Core 2.0 的 API。我已经让 JWT 使用角色,但我想移动以使用它并获得权限。我有一个已定义的权限列表,我的想法是根据该权限创建动态角色。

因为角色是动态的,所以我不能使用基于角色的身份验证,所以我需要根据权限对用户进行身份验证。

假设您有一个静态权限列表。例如:

  • 创建帖子
  • 编辑帖子
  • 查看所有帖子
  • 查看我的帖子

现在假设我有角色:

public class Role
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<RolePermission> Permissions { get; set; }
    public bool Status { get; set; }
}

您可以创建动态角色并从给定的静态示例列表中选择权限列表。

现在我想创建一个具有此权限的名为“管理员”的角色:

  • 创建帖子
  • 编辑帖子
  • 查看所有帖子

我的想法是有一个像这样的 JWT:

JWT 示例:

{
  "iat": 1416929061,
  "jti": "802057ff9b5b4eb7fbb8856b6eb2cc5b",
  "role": "Administrator",
  "permissions": {
    "posts": {
      "actions": ["readall", "create", "edit"]
    }
  }
}

现在我只想检查权限以便访问 API 中的资源。

唯一的解决方案是为每个权限创建策略?我怎样才能做到这一点?

最佳答案

根据您当前的问题,我相信您需要的是在 Auth0 仪表板中设置一个 API - 请参阅 docs here .然后,您可以根据需要为 API 定义默认范围。

为了根据用户所属的角色影响给定用户身份验证实际应用的范围,您可以在 Auth0 仪表板中定义规则。这是一个非常简单的例子:

function (user, context, callback) {

  user.app_metadata = user.app_metadata || {};

   if (user.app_metadata.role === "Administrator") {
     context.accessToken.scope = 'openid read:posts create:posts edit:posts';
   } else if (user.app_metadata.role === "User") {
      // define likewise as needed..
   }

   callback(null, user, context);
}

role 是静态应用于用户配置文件,还是动态查找等等,不太清楚,将取决于您的要求。但是,如果您设置了它,您应该会收到一个 JWT 访问 token ,其有效负载包含如下内容(针对用户身份验证具有 Administrator 角色的情况。

enter image description here

然后您可以保护您的 .NET Core API 以相应地验证访问 token 。如果您不使用 API,那么理论上您“可以”改用 ID token ……(因为应用程序本身就是消费者)。但我是基于以上理解,您希望授权针对某些 API 的请求...?

关于c# - 在 .NET Core 2.0 中使用 JWT 基于权限访问资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46328906/

相关文章:

c# - 我怎样才能找出哪个对象创建了这个对象

c# - 如何在 C# 中将数据从子窗体发送到父 MDI 窗体或从父 MDI 发送到子窗体?

c# - 如何使用 C# ASP.NET Core 应用程序通过 Elastic Beanstalk 设置对特定文件夹的权限?

c# - Linq查询OrderBy多个

c# - 如何删除 WP7 锁定屏幕上的音量控制?

C# + N单元 : Unit testing methods with byte array arguments

c# - ASP.NET MVC 5.1 EditorFor 和 DisplayFor 不使用自定义模板

asp.net - 在 ASP.NET 中加载配置文件发生异常时,如何为错误页面响应设置状态代码 500

asp.net-core - ASP.NET Core 2.1 中 [ApiController] 中的 POST 操作

asp.net-core - ASP.NET Core 是否可以为单个 Controller 启用 XmlSerialization