我有一个使用 .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
角色的情况。
然后您可以保护您的 .NET Core API 以相应地验证访问 token 。如果您不使用 API,那么理论上您“可以”改用 ID token ……(因为应用程序本身就是消费者)。但我是基于以上理解,您希望授权针对某些 API 的请求...?
关于c# - 在 .NET Core 2.0 中使用 JWT 基于权限访问资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46328906/