【问题标题】:React SSO using SAML without web server在没有 Web 服务器的情况下使用 SAML 响应 SSO
【发布时间】:2020-10-28 21:37:15
【问题描述】:

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

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

我想知道:

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

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

【问题讨论】:

  • SAML 不常用于/不打算用于 SPA(单页应用程序)。目前如何对 API 的调用进行身份验证和授权?
  • 我有一个登录页面来输入 id/pw,将它们发布到 API 服务器登录端点以进行身份​​验证并取回 JWT 令牌。之后,我们在 API 调用中使用该令牌进行身份验证。
  • 我建议您转向 OAuth,或者更好的 OIDC。

标签: reactjs single-sign-on saml


【解决方案1】:

正常情况下,哪一个是Service Provider?我的 IIS Web 服务器?还是 API 服务?

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

使用 SPA(单页应用程序)我发现了问题,在 SAML 中,用户被重定向或发布远离 SAML 请求和 SAML 响应。

我有一个登录页面来输入 id/pw,将它们发布到 API 服务器登录端点以进行身份​​验证并取回 JWT 令牌。之后我们在 API 调用中使用该令牌进行身份验证

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

我无法将 SAML 实现到 API 服务,我的 Web 服务仅用于加载我的应用程序而没有服务器端逻辑,我该如何实现 SAML?

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

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

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

【讨论】:

  • 从安全角度来看,允许在客户端上运行的 SPA 验证 SAML 断言是一个危险的选择。 (编辑:现在 ibre-read 你的最后一段,也许你在暗示这个......但你应该非常清楚,断言应该在服务器端进行验证。)
  • @AndrewK。是的,有一些限制和影响没有明确说明。 SAML 响应是短暂且大的,并不是真的打算用作访问令牌(我也已经看到了)。即使在技术上也可以在 Web 客户端验证 SAML 令牌(我建议不要这样做),确实没有办法仅在客户端安全地创建访问令牌。
  • 感谢您提供所有信息。我在想这是否可行: 1. 我将使用 ExpressJS 设置一个新的 Web 服务器 2. Express 服务器处理 SAML SSO 3. 我将更改登录名,调用新的 Express 服务器进行登录,它为我执行 SSO 4.如果登录成功,Express Server调用原始API服务器获取token 5.SPA app照常使用token,只有token过期,再次调用SSO可以吗?或任何更好的建议?感谢您的帮助。
  • @EricCheng The Express server handle SAML SSO 好。请使用一些成熟的库(passport-saml,..)。 if token expire, call SSO 如果您没有任何刷新令牌,则需要重新进行身份验证。 call original API server to get the token根据什么获取token?通常认证服务器需要直接返回访问令牌(在 saml 断言中没有密码),它可能有效,但您必须解决细节。祝你好运:)
猜你喜欢
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多