在没有 Web 服务器的情况下使用 SAML 响应 SSO

React SSO using SAML without web server

我有一个使用 Create-react-app
开发的网络应用程序 我将其托管在 IIS 上,IIS 仅响应加载应用程序,没有服务器端 逻辑(没有 Express 或任何其他网络服务器)
该应用程序在同一 IIS 上使用 RESTful API,这是我无法控制的(我无法进行更改)。

现在我的一位客户请求 将 SAML SSO 添加到我们的应用程序。

我想知道:

  1. 正常情况下,Service Provider是哪一个?我的 IIS Web 服务器?或 API 服务?
  2. 对于我的情况,我无法将 SAML 实施到 API 服务,我的 Web 服务仅用于加载我的应用程序而没有服务器端逻辑,我该如何实施 SAML?
  3. 谁能给我一些 React 实现 SAML SSO 教程或文章供参考?

感谢您的帮助,欢迎提供任何信息或建议!

in normal situation, which one is the Service Provider? My IIS Web server? or the API service?

我假设客户希望使用其内部 IdP 对用户进行身份验证。所以你的应用就是SP。但是您必须定义不同的令牌服务(详情如下)。

使用 SPA(single-page-applications)我看到了问题,在 SAML 中,用户被重定向或post离开 SAML 请求和 SAML 响应。

I have a login page to enter id/pw, post them to API server Login endpoint to authenticate and get back a JWT token. After that we use that token in API calls for authentication

API 服务正在使用基于提供的 username/password 颁发的 JWT 令牌。我建议扩展令牌服务(或使用不同的服务)以根据提供的 SAML 响应发布 JWT 令牌 - 令牌交换服务。在许多 OAuth 实现中,它被称为 SAML 授权类型

I cannot implement SAML to API service, my web service only used to load my app without server side logic, how can I implement SAML?

通常在身份验证后,用户会被重定向或posted 到 SAML ACS 端点 URL,服务器可以在其中创建某种会话(cookie、参数、令牌等)和用户被重定向到 URL 返回带有会话信息的网页。

如果您使用的是 SPA,则可以使用弹出窗口 window 或带重定向的 SAML(而不是带 post),其中页面可以读取 SAML 响应参数(断言、签名、 ..) 并在上面提到的令牌交换服务中使用它们。

在处理 SAML 响应时,请尝试使用一些成熟的、已知的、out-of-box 库,这是一项安全服务,如果处理不当可能会导致安全漏洞。但是您需要在服务器端执行此操作,因为最后您需要 APIs.

使用的 JWT 令牌