Oauth 2.0 如何在JWT OAuth2令牌中建模资源级权限?

Oauth 2.0 如何在JWT OAuth2令牌中建模资源级权限?,oauth-2.0,token,jwt,access-token,Oauth 2.0,Token,Jwt,Access Token,将资源级权限编码为JWTaccess\u令牌的规范方法是什么?或者换句话说,您如何最好地编码对他人资源的访问 是这样的吗 { scopes: { me: ['user', 'repo'], // My user repo123: ['repo'], // Someone else's repo org541: ['admin', 'repo'], // My org org206: ['repo:read'] // Some

将资源级权限编码为JWT
access\u令牌的规范方法是什么?或者换句话说,您如何最好地编码对他人资源的访问

是这样的吗

{
  scopes: {
    me: ['user', 'repo'],      // My user
    repo123: ['repo'],         // Someone else's repo
    org541: ['admin', 'repo'], // My org
    org206: ['repo:read']      // Someone else's org
  }
}
或者像这样,使用命名空间范围标记(在本例中为
|

还是别的什么


这同样适用于“角色”或“会员资格”或类似的标签(我意识到我已经混合了上面的例子)-核心问题仍然是如何(最好)您是否在单个JWT
access\u token
中区分每个资源的这些标记?

我不知道您需要实现的确切用例,但我可能会尝试仅为API操作保留范围。例如“获取存储库列表”。然后,使用访问令牌的客户端可以列出它可以使用的存储库,资源服务器通过用户名或用户组验证访问权限

如果您想限制客户机可用的资源,那么您可以拥有一个作用域,该作用域只允许访问一个子集(例如,用户自己的存储库)


将资源及其权限编码在作用域中会使它们难以使用(在编写身份验证请求时,客户机需要知道资源标识符)权限可能会在访问令牌的整个生命周期内发生变化。

我不知道您需要实现的确切用例,但我可能会尝试仅为API操作保留范围。例如“获取存储库列表”。然后,使用访问令牌的客户端可以列出它可以使用的存储库,资源服务器通过用户名或用户组验证访问权限

如果您想限制客户机可用的资源,那么您可以拥有一个作用域,该作用域只允许访问一个子集(例如,用户自己的存储库)


将资源及其权限编码在作用域中会使其难以使用(在编写身份验证请求时,客户端会知道资源标识符),并且权限可能会在访问令牌的生命周期内发生变化。

我是否正确理解,您有一些具有访问控制列表(ACL)的对象你想创建一个JWT来反映这些ACL在令牌发布时的状态?你为什么要这样做?@JánHalaša是的,大致正确。目的是封装用户的权限,不仅是对该用户拥有的资源,而且是他们被授予访问权限的资源(例如,我邀请你编辑我的repo)。我是否正确理解,您有一些具有访问控制列表(ACL)的对象你想创建一个JWT来反映这些ACL在令牌发布时的状态?你为什么要这样做?@JánHalaša是的,大致正确。其目的是封装用户的权限,不仅是为了该用户拥有的资源,还包括他们被授予访问权限的资源(例如,我邀请你编辑我的repo)。
{
  scopes: ['me|user', 'me|repo', 'repo123|repo', 'org541|admin'... etc]
}