【发布时间】:2022-04-14 04:20:15
【问题描述】:
我正在努力为使用网关的 REST API 设计 SAML2.0 身份验证。 REST 在我的后端和我的应用程序之间使用。我正在使用 Java Servlet 过滤器和 Spring。
我看到了两种可能性:
每次都将 SAML 令牌添加到标头中。
使用 SAML 进行一次身份验证,然后在客户端和网关之间使用会话或类似(安全对话)。
案例 1:这是一个很好的解决方案,因为我们仍然是 RESTful 但是:
- SAML 令牌非常大。由于标头过大,可能会产生问题。
- 重放令牌并不是出于安全考虑的最佳方式。
案例 2: 不再是无状态的,我必须管理与客户端的链接。由于我使用网关,因此底层服务仍然可以是 RESTful。
案例 2 寻找更好的选择,尽管它不遵循其余约束。
是否有人已经这样做并给我一些指示(用于设计或实施)?
有没有更好的方法来使用 SAML?
欢迎任何帮助或建议。
【问题讨论】:
-
使用第二种方法。无论如何,许多服务提供商都会拒绝重放的令牌。这是为了验证用户还是您的客户端软件?
-
是对用户进行认证
-
如果您愿意使用 SAML 替代品,您也可以使用 OAuth2 进行查看。
-
没有 SAML 令牌之类的东西。您是说将 SAML 断言放在授权标头中吗?因为一个 SAML 断言只能被使用一次,因为它有一个唯一的 ID(以防止重放攻击)。此外,每个 SAML 断言通常只有一个很小的有效时间窗口(通常只有几分钟)。
标签: java rest session saml saml-2.0