JWT访问令牌:矛盾?

时间:2019-04-30 18:45:06

标签: oauth-2.0 jwt microservices openid-connect

我正在尝试为微服务架构实现安全解决方案。我的身份验证服务器支持OAuth2和OIDC。

我正在尝试确定是否可以在微服务之间传递JWT令牌,以避免必须反复交换不透明的令牌来获得用户的声明。没有(实用的)阻止我这样做的。我可以:

  • 在进行呼叫时,将从认证服务器获得的JWT(ID令牌)用作承载令牌。
  • 每个服务都可以针对auth服务器(缓存的)JWKS验证该令牌,以确保其有效
  • 每个服务在调用其他服务时都可以包含令牌

我已经读过it's ok for an access token to be a JWT

太好了,但是:

should I?

我的(道德上的)问题是这样的:

JWT 用于specific audience。实际上,该规范基本上说如果不适合您,则应该拒绝它。

承载者令牌intended to be non-audience specific。因此,如果我发出一个令牌,表明承载者可以阅读我的邮件,那么它可以通过六种不同的服务传递,其中任何一种都应该能够阅读我的邮件。

所以我的问题很简单,JWT如何成为不记名令牌?

奖励积分可链接到有效的分布式身份验证解决方案的任何精美文章/视频/示例!

1 个答案:

答案 0 :(得分:1)

  

JWT适用于特定受众。实际上,该规范基本上说如果不适合您,则应该拒绝它。

不记名令牌也是如此。任何人都可以传递它,但是只有听众才能对它的有效性采取行动。

因此,服务X可以获取具有预期的受众服务Y的JWT承载令牌。它不会基于此授权给主叫客户端任何授权,但与此同时调用服务Y不会违反受众声明。违反听众要求的是,如果服务X验证了JWT,看到不匹配的听众,并说:“好吧,因为客户端有一个JWT声明它是用户Fubar,所以我可以返回有关用户Fubar的信息。”

不透明的非JWT承载令牌的区别在于服务X无法滥用它...