【问题标题】:JWT access tokens: a contradiction?JWT 访问令牌:矛盾?
【发布时间】:2019-09-19 11:22:18
【问题描述】:

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

我试图弄清楚我是否可以在我的微服务之间传递 JWT 令牌,以避免不得不反复交换不透明的令牌来获取用户的声明。没有什么(实际的)可以阻止我这样做。我可以:

  • 在进行调用时,使用我从身份验证服务器获取的 JWT(ID 令牌)作为不记名令牌。
  • 每个服务都可以根据身份验证服务器的(缓存的)JWKS 验证该令牌,以确保其有效
  • 每个服务都可以在其对其他服务的调用中包含令牌

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

很好,但是:

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

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

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

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

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

【问题讨论】:

  • 你可以看看这里:stackoverflow.com/questions/40375508/… JWT 可以用于很多事情,其中​​包括不记名令牌,即您可以向某些服务提供的一条信息,凭借你拥有它(你是“承载者”)授予你访问某些东西的权限。
  • 因此矛盾!我用令牌调用服务 X。服务 X 使用令牌调用服务 Y。如果它是一个不透明的令牌,很好。如果是 JWT,那么其中一项服务就违反了规则(因为它们不能同时成为目标受众)。

标签: oauth-2.0 jwt microservices openid-connect


【解决方案1】:

JWT 面向特定受众。事实上,规范基本上说,如果它不适合你,你应该拒绝它。

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

因此,服务 X 可以通过目标受众服务 Y 获得 JWT 不记名令牌。它不会基于此授予调用客户端任何授权,但使用它调用服务 Y 不会违反受众声明。违反受众声明的是,如果服务 X 验证 JWT,看到不匹配的受众并说“好吧,由于客户端有一个 JWT 声明它是用户 Fubar,我可以返回一些关于用户 Fubar 的信息。”。

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

【讨论】:

  • 啊。当然。我误读了规范。令牌来自谁来自并不重要,但重要的是它去往。谢谢!
猜你喜欢
  • 2019-12-08
  • 2017-12-29
  • 1970-01-01
  • 2021-08-24
  • 2021-08-23
  • 2020-10-27
  • 2020-10-15
  • 2019-11-29
  • 2021-02-12
相关资源
最近更新 更多