Oauth 2.0 如何在JWT OAuth2令牌中建模资源级权限?
将资源级权限编码为JWTOauth 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
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
}
}
或者像这样,使用命名空间范围标记(在本例中为|
:
还是别的什么
这同样适用于“角色”或“会员资格”或类似的标签(我意识到我已经混合了上面的例子)-核心问题仍然是如何(最好)您是否在单个JWTaccess\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]
}