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

时间:2017-08-02 09:37:04

标签: oauth-2.0 token jwt access-token

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

是这样的:

{
  scopes: {
    me: ['user', 'repo'],      // My user
    repo123: ['repo'],         // Someone else's repo
    org541: ['admin', 'repo'], // My org
    org206: ['repo:read']      // Someone else's org
  }
}

或者像这样,使用命名空间范围标记(在本例中为<resource>|<scope>

{
  scopes: ['me|user', 'me|repo', 'repo123|repo', 'org541|admin'... etc]
}

还是别的什么?

这同样适用于“角色”或“成员资格”或类似的标签(我意识到我已将上面的例子混合了一点) - 核心问题仍然是如何(最好)区分这些标签 per资源在单个JWT中access_token

1 个答案:

答案 0 :(得分:1)

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

如果您想限制客户端可用的资源,您可以使用一个范围来仅授予对子集的访问权限(例如,仅授予用户自己的存储库)。

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