关于如何解决看似简单的任务,我一直在摸不着头脑约2天,但它开始让我发疯。
我有一个应用程序,用户将使用SAML 2.0进行身份验证。 我为前端设置了一个反应应用程序,并且认为我将使用JWT来确保前端和后端之间的rest-api通信。
当用户登录时,流程如下:
接下来我该怎么办? 问题是,当从身份提供者回调时,用户不在react-application中,因此我已经丢失了应用程序中的所有状态,因此我回复的任何内容都将被发送到浏览器。
有什么办法可以强制浏览器给我一个identityprovider回拨的SamlResponse吗? 然后我可以将它作为来自react-application的http请求发送到服务器。
经过一番思考,我想出了以下解决方案,对我来说效果很好。
SAML有一个名为RelayState
东西,它是服务提供商必须响应的属性。 所以现在这个过程看起来像这样:
http://frontendserver.com
并使用React应用程序(未登录)获取服务器静态页面。 http://backendserver.com/login/?RelayState=http://frontendserver.com
,该服务通过passport-saml进行身份验证并将用户重定向到SP。 所以我在RelayState中传递请求的来源。 RelayState/#token
。 这似乎是显而易见的方法,但我花了很长时间才弄清楚这会起作用。
我知道这个问题是节点的后端,但我发现一个PHP / Apache网络服务器后端执行情况的文章在这里 ,我认为它可以帮助别人试图了解这种类型的事情是如何工作的处理流程。