不记名令牌太大了



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

假设我们有一个名为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保留一个令牌)。

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

有一个标准的方法来解决这个问题吗?我正在考虑使用things范围可互换的令牌,因此我可以交换仅具有things部分的限制性令牌,用于具有things其他部分的其他令牌。

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

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

我认为@hans-z是正确的。oAuth不能为您解决这个问题。

当你遇到困难时,我建议你实现一个User-Service,其中"事物"可以用JWT令牌请求。

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

最新更新