【问题标题】:Microservices Authentication best practices and security (OAuth 2.0 and OpenIdConnect)微服务身份验证最佳实践和安全性(OAuth 2.0 和 OpenIdConnect)
【发布时间】:2017-03-05 11:29:10
【问题描述】:

有几种方法可以在微服务中构建身份验证。然而非常流行的是使用 JWT 令牌和 OAuth 协议以及 OpenID Connect 身份层。

this tutorial 解释如何实现它有一个提示:

当令牌必须离开您的网络时通过引用传递,然后在它们进入您的空间时将它们转换为按值令牌。在您的 API 网关中执行此转换。

但是我不清楚背后的原因是什么。我怀疑这可能是由于一些安全优势(不让客户有可能阅读任何特定信息)。因为在 JWT 令牌本身中,它可能是有关角色/权限的信息。但为此目的,也可以对令牌进行加密。

另一个原因可能是 JWT 令牌太大,为了不每次使用这种方法时都携带这个令牌。 (或者如果 JWT 令牌存储在 cookie 中,它有大小限制)。

我没有看到任何信息表明 JWT 令牌身份验证受到威胁,将其保留在客户端(在浏览器中)是一种不好的做法。

另一方面,我看到 Ping Identity 也在使用 通过引用传递 方法。你能帮我理解它背后的原因吗?

【问题讨论】:

  • 关于by-reference/by-value问题:你看过the video放在你引用的文本附近吗?
  • 是的,但是它没有回答我的问题:(

标签: security oauth oauth-2.0 microservices openid-connect


【解决方案1】:

它们都是有效的选项,并且与往常一样,您想要应用它们的确切场景将决定最合适的选项。通常情况下,每个选项都有其优点和缺点,您已经提到了一些,所以我会尽力在讨论中添加一些新内容。

主要区别在于内容,按值将包含实际值,而引用只是随机的位序列。如果您想在令牌中表示敏感信息,这可能会倾向于参考令牌。

确实,如果您使用 JWT,您可以对它们进行加密以确保机密性,但这会增加显着的复杂性,并且鉴于加密,可用库中对 JWT 加密的支持很可能不如对签名的支持没有类似的广泛用途。

关于尺寸,我认为这不应该是决定性因素。是的,如果您使用按值标记,则需要将它们保持足够小,以免在通道上造成重大开销,但您不应该仅仅因为这个限制而选择一个与另一个。

你没有提到的一件事,但我认为重要的是引用令牌似乎更适合授权服务器和资源服务器属于同一实体的情况。确实已经存在standard to cover token introspection,以便外部资源服务器可以以可互操作的方式查询有关引用令牌的信息。然而,当两个参与者都在同一个安全边界内时,引用令牌应该更容易扩展和实现,这仍然是事实。

文章中的建议也很有趣,您可以减少外部网络的开销,并且没有信息披露问题,然后在一个中心位置升级到按价值代币,这意味着它背后的所有其他服务仍然可以获得从令牌本身中已有所需信息的简单性。

总而言之,如果信息泄露对您来说是个问题,您可能会选择参考令牌,以免支付 JWT 加密的成本;否则,您不妨让生活变得简单,并使用价值代币。

【讨论】:

    【解决方案2】:

    我相信使用引用令牌(不透明令牌)而不是按值 (JWT) 的主要好处(本文想要传达的主要好处是,在访问令牌分发到外部时能够控制它)网络。

    换句话说,如果我们在网络外部以 JWT 的形式发布访问令牌,那么在紧急情况下(当用户被停用/终止、丢失手机等时)很难撤销访问权限。但是引用标记很容易被撤销,因为它是 AS 边界内的指针。

    更详细的解释请见here

    【讨论】:

      猜你喜欢
      • 2017-03-07
      • 2020-11-27
      • 2010-09-14
      • 1970-01-01
      • 2011-09-21
      • 2011-09-29
      • 1970-01-01
      • 2014-01-23
      • 2013-01-17
      相关资源
      最近更新 更多