2016-09-13 42 views
2

在我正在构建的应用程序中,我们使用JWT令牌作为OAuth承载令牌。假设我们有一个名为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)。

我无法摆脱承载的令牌,因为我们的一些组件不谈得来的令牌发放方出于多种原因。

有没有解决这个问题的标准方法?我在想与things范围互换做记号,这样我就可以交换受限令牌只对那些在他们things其他地区的令牌他们things的一部分。

+0

您是否找到解决此问题的解决方案? – smokedice

回答

4

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

这项服务并不需要被认证服务器本身;它也可以是一个数据库或任何类型的后端系统(可能与授权服务器可以交谈的相同)。

+0

是的,但是这会破坏使用持票人令牌吗?这个想法是,一个客户端根本不必和我​​们的资源服务器通话。 – romeovs

+0

您正在与JWT和RS混合使用AS –

+0

您能否向我解释RS和AS的含义?你是说没有包含token的访问权限的accessToken的用例? – romeovs

1

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

当你点击痛苦的障碍,我建议你实现一个用户服务其中“事情”可以与JWT令牌请求。

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