使用 SAML 进行 REST API 身份验证

2022-09-02 04:41:49

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

我看到两种可能性:

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

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

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

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

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

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

有人已经这样做了,并给我一些指针(用于设计或实现)吗?

有没有更好的方法来做到这一点与SAML?

欢迎任何帮助或建议。


答案 1

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

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


答案 2

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

它有点像将oauth与saml混合在一起,但如果你仍然需要后者进行身份验证,它可能是要走的路。


推荐