2017-08-02 63 views
0

什么是编码资源级别的权限为JWT access_token的正规途径?换句话说,你如何最好地编码访问其他人的资源?如何建模JWT OAuth2令牌中的资源级权限?

它是这样的:

{ 
    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] 
} 

或者别的东西再

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

+0

我是否理解正确的话,你必须对他们的访问控制列表(ACL)某些对象。你想创建一个JWT来反映这些ACL在令牌发行时的状态吗?你为什么想这样做? –

+0

@JánHalaša是的,大致正确。目的是为了封装用户的权限,不仅限于该用户拥有的资源,还包括他们已被授权访问的资源(例如,我邀请您编辑我的回购)。 – papercowboy

回答

1

我不知道你需要实现精确的用例,但我可能会尽量保持范围只是API操作。如“获取存储库列表”。然后,使用访问令牌的客户端可以列出它可以使用的存储库,并且资源服务器通过用户名或用户组验证访问权限。

如果你想限制提供给客户的资源,你可以有,将允许访问只是一个子集(例如只是用户自己的信息库)的作用域。在范围编码

拥有的资源和他们的权限会令他们很难用(合成认证请求时,客户端必须知道资源标识符)和权限可能在访问令牌的一生都在变化。