【问题标题】:REST API authentication with SAML使用 SAML 进行 REST API 身份验证
【发布时间】:2022-04-14 04:20:15
【问题描述】:

我正在努力为使用网关的 REST API 设计 SAML2.0 身份验证。 REST 在我的后端和我的应用程序之间使用。我正在使用 Java Servlet 过滤器和 Spring。

我看到了两种可能性:

  1. 每次都将 SAML 令牌添加到标头中。

  2. 使用 SAML 进行一次身份验证,然后在客户端和网关之间使用会话或类似(安全对话)。

案例 1:这是一个很好的解决方案,因为我们仍然是 RESTful 但是:

  • SAML 令牌非常大。由于标头过大,可能会产生问题。
  • 重放令牌并不是出于安全考虑的最佳方式。

案例 2: 不再是无状态的,我必须管理与客户端的链接。由于我使用网关,因此底层服务仍然可以是 RESTful。

案例 2 寻找更好的选择,尽管它不遵循其余约束。

是否有人已经这样做并给我一些指示(用于设计或实施)?

有没有更好的方法来使用 SAML?

欢迎任何帮助或建议。

【问题讨论】:

  • 使用第二种方法。无论如何,许多服务提供商都会拒绝重放的令牌。这是为了验证用户还是您的客户端软件?
  • 是对用户进行认证
  • 如果您愿意使用 SAML 替代品,您也可以使用 OAuth2 进行查看。
  • 没有 SAML 令牌之类的东西。您是说将 SAML 断言放在授权标头中吗?因为一个 SAML 断言只能被使用一次,因为它有一个唯一的 ID(以防止重放攻击)。此外,每个 SAML 断言通常只有一个很小的有效时间窗口(通常只有几分钟)。

标签: java rest session saml saml-2.0


【解决方案1】:

它仍然是草案,但是:OAuth2 SAML 承载配置文件可能是一个可能的解决方案。 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-saml2-bearer-17

使用 SAML2 向 OAuth2 提供者进行身份验证,然后使用 OAuth2 令牌调用您的服务。

【讨论】:

  • 哦,我不喜欢那个。
  • 这似乎是要走的路。几家网络巨头使用带有 JSON Web 令牌 (JWT) 的 OAuth 来保护他们的 REST 服务。另请参阅此草案:http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-05#page-21 和安全令牌服务 (STS) 密钥世界
  • 那么,如何使用 SAML2 对 OAuth2 提供者进行身份验证?
  • 您使用 STS 进行翻译。它将吃掉一个 OAuth2 令牌并生成一个 SAML2 令牌。
  • 签名/加密断言如何通过?调用者必须解密它们吗?
【解决方案2】:

此外,您可以生成一个 jwt 令牌并将其放在 SAML 属性中:从现在开始,您可以在 http 标头中传递 jwt。

这是一种将 oauth 与 saml 混合在一起的方式,但如果您仍需要后者进行身份验证,这可能是可行的方法。

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 2013-01-05
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多