将资源级别权限编码为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
?
答案 0 :(得分:1)
我不知道您需要实现的确切用例,但我可能会尝试将范围保留用于API操作。例如&#34;获取存储库列表&#34;。然后,使用访问令牌的客户端可以列出它可以使用的存储库,资源服务器可以通过用户名或用户组验证访问权限。
如果您想限制客户端可用的资源,您可以使用一个范围来仅授予对子集的访问权限(例如,仅授予用户自己的存储库)。
在作用域中编码资源及其权限会使它们难以使用(在编写身份验证请求时,客户端会知道资源标识符)并且权限可能会在访问令牌的生命周期内发生变化。