将 SAML 响应从 Web 应用程序传递到 REST API 以进行身份​​验证?

Pass SAML response from a Web App to the REST API for authentication?

我们有一个使用 REST APIWeb 应用程序。 REST API 基于 Loopback 并使用其内置的基于令牌的身份验证。对于 Web 应用程序,我们通过 HTTPS 使用基于表单的身份验证,因此用户必须输入他的用户名和密码,然后我们使用这些用户名和密码通过 POST /users/login 端点从 REST API 获取访问令牌。

我们的一位客户要求我们通过 SAML 2.0 支持 单点登录 (SSO) 身份验证AD FS.

我们将 Web 应用程序配置为服务提供商(AD FS 中的依赖方)并设法为其支持 SSO。 changeling 部分是 Web App 和 REST API 之间的身份验证。现在的想法是将 Web 应用程序和 REST API 配置为相同的依赖方,并将新的 POST /users/saml-login 端点添加到 REST API,以便 Web 应用程序可以发送 SAML 响应到该终点并根据 SAML 响应中指定的声明获取访问令牌。其他一切都应该像以前一样工作。这是我想象的流程:

  1. Web 应用程序生成 SAML 请求并将用户重定向到 IdP 登录页面
  2. 成功登录后,用户将被重定向回带有 SAML 响应的 Web 应用程序
  3. Web 应用充当代理并将 SAML 响应重定向到验证它的 REST API 端点 (POST /users/saml-login)
  4. 如果 SAML 响应有效,API returns 一个基于声明的访问令牌
  5. Web 应用程序使用访问令牌与 REST 进行进一步通信API 与以前相同

问题来了:这样实现基于SAML的SSO可以吗?您是否发现这种方法有任何问题或安全注意事项?还有其他选择吗?

我在网上阅读了很多文章,在 Whosebug 上阅读了很多关于如何一起使用 SAML 和 REST API 的问题:

None 确实帮助我确认或否定了上述想法。

这听起来是个合理的方法。我想不出任何安全问题。 您只需在应用程序内部重新发布 SAML 响应以供处理。只要您随后在 REST API 中对 SAML 响应和断言执行各种安全检查,就不会有任何问题。