在 reactjs 中实现单点登录(saml2),无需 express

IT技术 reactjs single-sign-on saml-2.0 wso2is
2021-05-17 06:42:13

我想在 React 中使用 wso2 ei 实现 SSO SAML2

  1. 我去检查我是否通过身份验证
  2. 如果未通过身份验证,我应该重定向到 sso URL
  3. 当我在 sso 身份提供者上成功登录时,我使用令牌重定向到我的react应用程序
  4. 然后将令牌保存到 localstorage 并继续

我已经在 Passport 和 Express 中尝试过,其中渲染发生在服务器端。但我希望它在客户端使用 React,步骤:

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

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

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

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

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