持票人令牌太大了

时间:2016-09-13 09:01:03

标签: oauth-2.0 jwt bearer-token

在我正在构建的应用程序中,我们使用JWT令牌作为OAuth Bearer令牌。

假设我们有一个名为things的资源集合,可以通过thing ID寻址,例如。 things/1things/44

目前,每当有人请求范围为things的访问令牌时,我们都会列出用户对其拥有的things权限的所有权限的列表:

{
   "sub": "Romeo",
   "scope": [ "things" ],
   "things": {
     "1": [ "read", "write", "delete" ],
     "44": [ "read", "write"],
   }
  // ...
}

这种方法很好,但是当用户有很多things时,情况会变糟。由于所有权限都在JWT令牌内编码,因此对于用户拥有的每个thing,令牌都会变得更大。

这不可扩展,我需要为此找到解决方案。我可以一次将令牌范围限定为单个thing,但是管理的客户端的令牌管理变成地狱(我需要一个能够列出令牌并且需要的令牌每个thing保留一个令牌。

我无法摆脱Bearer令牌,因为我们的某些组件由于多种原因无法与令牌发行者通信。

是否有解决此问题的标准方法?我正在考虑使things范围内的令牌可以互换,因此我可以交换仅包含things部分内容的限制令牌,用于包含things其他部分的其他令牌在他们中间。

2 个答案:

答案 0 :(得分:4)

该信息不一定需要 in 令牌。只要令牌包含对用户的引用,资源服务器就可以查找某些后端服务/数据库以检索相应的权限,与当时正在请求的资源相关联。

该服务不需要是授权服务器本身;它也可以是数据库或任何类型的后端系统(可能与授权服务器通信的相同)。

答案 1 :(得分:1)

我认为@ hans-z是正确的。 oAuth并没有为你解决这个问题。

当您遇到痛苦障碍时,我建议您实施用户服务,其中" 事情"可以使用JWT令牌请求。

要推迟痛苦障碍,您可以考虑更改为JSON Web Tokens或支持令牌压缩的其他实施,或在通过网络发送时使用protobuf重新编码令牌。