在没有 express 的 reactjs 中实现单点登录(saml2)

implement single sign on(saml2) in reactjs without express

我想在 React where

中使用 wso2 ei 实现 SSO SAML2
  1. 我去看看我有没有认证
  2. 如果未通过身份验证,我应该重定向到 sso URL
  3. 当我在 sso 身份提供商上成功登录时,我使用令牌重定向到我的 React 应用程序
  4. 然后保存token到localstorage继续

我已经在服务器端进行渲染的 Passport 和 Express 上进行了尝试。但我希望在客户端使用 React,步骤:

  1. 我进入我的主页并点击登录页面
  2. 它将我带到 wso2 身份提供者,然后我登录
  3. 然后我重定向到我的快递应用程序

简短的回答:你不能那样做。

您不能在没有后端的情况下使用 SAML。 SAML 要求您注册一个服务提供者 (SP),该服务提供者必须可以通过 SSL 证书进行识别。因此,SP 必须有一个私钥,出于显而易见的原因,您不能将其分发给浏览器客户端。最重要的是,断言端点应该接受 POST HTTP 请求,这在传统上只有服务器才能做到。

如果您知道要使用哪个 IdP,则可以跳过 IdP 发现,但无法绕过断言阶段。您必须具有 SSO 的断言端点。此端点必须能够解密使用 SP 的 public 密钥加密的消息,因此它必须在服务器上实现。

为了尽可能接近您想要的,您可以将 SP 实现为一个单独的微服务,它只有一个(如果您使用 DS,则为两个)端点。您的登录服务的断言端点可以为用户创建一个令牌,并将他们重定向到在查询变量中携带令牌的前端。