Reactjs 在不使用web服务器的情况下使用SAML响应SSO
我有一个使用Reactjs 在不使用web服务器的情况下使用SAML响应SSO,reactjs,single-sign-on,saml,Reactjs,Single Sign On,Saml,我有一个使用Create-react-app开发的web应用程序 我把它放在IIS上,IIS只响应加载应用程序,上面没有服务器端逻辑(没有Express或任何其他web服务器) 该应用程序正在同一IIS上使用RESTful API,这超出了我的控制(我无法进行更改) 现在,我的一个客户请求将SAML SSO添加到我们的应用程序中 我想知道: 在正常情况下,哪个是服务提供商?我的IIS Web服务器?还是API服务 就我而言,我无法实现SAML到API服务,我的web服务只用于加载我的应用程序,没
Create-react-app
开发的web应用程序 我把它放在IIS上,IIS只响应加载应用程序,上面没有服务器端逻辑(没有Express或任何其他web服务器)
该应用程序正在同一IIS上使用RESTful API,这超出了我的控制(我无法进行更改) 现在,我的一个客户请求将SAML SSO添加到我们的应用程序中 我想知道:
我有一个登录页面来输入id/pw,将它们发布到API服务器登录端点以进行身份验证并获取JWT令牌。之后,我们在API调用中使用该令牌进行身份验证 API服务使用基于提供的用户名/密码发布的JWT令牌。我建议扩展令牌服务(或使用不同的服务)以基于提供的SAML响应(令牌交换服务)发出JWT令牌。在许多OAuth实现中,它被称为SAML grant类型 我无法实现SAML到API服务,我的web服务只用于加载我的应用程序,没有服务器端逻辑,如何实现SAML 通常在身份验证之后,用户被重定向或发布到SAML ACS端点URL,服务器可以在该URL中创建某种会话(cookie、参数、令牌等等),用户被重定向到网页返回的URL,该URL包含会话信息 如果您使用的是SPA,则可以使用弹出窗口或带重定向的SAML(而不是post),页面可以在其中读取SAML响应参数(断言、签名等),并在上述令牌交换服务中使用它们
在处理SAML响应时,请尝试使用一些成熟的、已知的、现成的库,这是一种安全服务,如果执行不当,可能会导致安全缺陷。但是,您需要在服务器端这样做,因为最后您需要API使用的JWT令牌。SAML通常不用于SPA(单页应用程序)。当前如何对API的调用进行身份验证和授权?我有一个登录页面,输入id/pw,将它们发布到API服务器登录端点以进行身份验证并获取JWT令牌。之后,我们在API调用中使用该令牌进行身份验证。我建议您转向OAuth,或者更好的OIDC。从安全角度来看,允许客户端上运行的SPA验证SAML断言是一个危险的选择。(编辑:既然ibre已经阅读了你的最后一段,也许你是在暗示这一点……但你应该非常清楚,这个断言应该在服务器端得到验证。)@AndrewK。是的,有一些限制和影响没有明确说明。SAML响应是短期的、大的,实际上并不打算用作访问令牌(我已经看到了)。即使在技术上可以在web客户端验证SAML令牌(我建议不要这样),实际上也没有办法只在客户端安全地创建访问令牌。感谢所有信息。我在想这是否有效:1。我将使用ExpressJS2安装一个新的web服务器。Express服务器处理SAML SSO 3。我将更改登录名,调用新的Express服务器进行登录,它将为我执行SSO 4。如果登录成功,Express Server将调用原始API服务器以获取令牌5。SPA应用程序将一如既往地继续使用令牌,只有在令牌过期时,再次调用SSO才能正常工作?还是有更好的建议?谢谢您的帮助。@EricCheng
Express服务器处理SAML SSO
很好。请使用一些成熟的库(passport saml,…)如果令牌过期,请调用SSO
如果您没有任何刷新令牌,则需要重新验证调用原始API服务器获取令牌
基于什么获取令牌?通常,身份验证服务器需要直接返回访问令牌(saml断言中没有密码),这可能有效,但您必须解决细节问题。祝你好运:)