【问题标题】:JWT and identifying caller identityJWT 和识别调用者身份
【发布时间】:2017-03-23 13:18:53
【问题描述】:

我无法理解如何根据调用者的身份正确保护使用 JWT 的服务。 我正在尝试构建一个可供多个其他服务使用的身份验证/授权服务。 假设为了简单起见,我们提到了 Auth Service,以及 Service A、Service B 和 Service C。 服务 A、B 和 C 能够验证令牌是由公共身份验证服务创建的(具有公钥)。 在Authentication后为每个服务生成的Token的payload中,列出了Authorization权限。

所以,是这样的:

议程:

  • 服务 A 需要访问服务 B。服务 C 不能访问服务 B。 用例:

    1. 服务 A 使用它本质上用于访问服务 B 的凭据登录,接收带有有效负载的 JWT,表明它授予访问服务 B 的权限。

    2. 服务 A 向服务 B 发出请求。服务 B 验证令牌。服务 B 验证令牌是否旨在从有效负载中用于自身。

一切都好。

现在,我要防止的是:

(步骤 1 与上述用例相同)

  1. 服务 C 劫持为服务 A 创建的 JWT。

  2. 服务 C 访问服务 B 资源。

基本上,问题是,如何防止一个令牌最终打开所有由通用身份验证服务进行身份验证的服务的门? 也许它超出了 JWT 的范围,但不知何故,我觉得好像我错过了一些可以防止这种情况发生的关键点。

【问题讨论】:

  • 始终使用短期令牌并确保使用 HTTPS/SSL 保护您的通信。

标签: web-services authentication jwt


【解决方案1】:

在此用例中,通常会向服务 A(也称为“客户端”)颁发两个令牌,一个用于访问服务 C,一个用于访问服务 B。

每个令牌都将包含一个所谓的“受众”字段,该字段指定预期的接收者是谁,并且接收者有责任检查该字段。在 JWT 中,该字段将是 aud,它将包含一些引用服务 C 或 B 的标识符。

服务 A 只会将令牌 B 发送给服务 B,将令牌 C 发送给服务 C。因此,服务 C 无法获取令牌 B,并且在对服务 B 使用令牌 C 时,服务 B 执行的受众检查将使其拒绝令牌 C。

【讨论】:

  • 但这并没有真正回答我的担忧,我在问题中的最后一条消息可能会产生误导。我说的是一个案例,例如,故意劫持令牌。这甚至是需要注意的“可行”可能性吗?在您所描述的情况下,任何服务仍然可以重用另一个服务的令牌,只要它以某种方式获得它。
  • 当使用所谓的不记名令牌时,没有什么可以做的;这将需要一种称为所有权证明的不同类型的令牌
猜你喜欢
  • 2011-08-22
  • 2019-05-08
  • 2019-03-10
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2020-09-03
  • 2018-12-21
  • 1970-01-01
相关资源
最近更新 更多