在我正在构建的应用程序中,我们使用JWT令牌作为OAuth Bearer令牌。
假设我们有一个名为things
的资源集合,可以通过thing
ID寻址,例如。 things/1
,things/44
等
目前,每当有人请求范围为things
的访问令牌时,我们都会列出用户对其拥有的things
权限的所有权限的列表:
{
"sub": "Romeo",
"scope": [ "things" ],
"things": {
"1": [ "read", "write", "delete" ],
"44": [ "read", "write"],
}
// ...
}
这种方法很好,但是当用户有很多things
时,情况会变糟。由于所有权限都在JWT令牌内编码,因此对于用户拥有的每个thing
,令牌都会变得更大。
这不可扩展,我需要为此找到解决方案。我可以一次将令牌范围限定为单个thing
,但是管理的客户端的令牌管理变成地狱(我需要一个能够列出令牌并且需要的令牌每个thing
保留一个令牌。
我无法摆脱Bearer令牌,因为我们的某些组件由于多种原因无法与令牌发行者通信。
是否有解决此问题的标准方法?我正在考虑使things
范围内的令牌可以互换,因此我可以交换仅包含things
部分内容的限制令牌,用于包含things
其他部分的其他令牌在他们中间。
答案 0 :(得分:4)
该信息不一定需要 in 令牌。只要令牌包含对用户的引用,资源服务器就可以查找某些后端服务/数据库以检索相应的权限,与当时正在请求的资源相关联。
该服务不需要是授权服务器本身;它也可以是数据库或任何类型的后端系统(可能与授权服务器通信的相同)。
答案 1 :(得分:1)
我认为@ hans-z是正确的。 oAuth并没有为你解决这个问题。
当您遇到痛苦障碍时,我建议您实施用户服务,其中" 事情"可以使用JWT令牌请求。
要推迟痛苦障碍,您可以考虑更改为JSON Web Tokens或支持令牌压缩的其他实施,或在通过网络发送时使用protobuf重新编码令牌。