由于缺乏对 SSO/SAML 的了解,我的大脑快要爆炸了。我目前正在开展一个项目,我们正在使用 shibboleth 实施 SSO 身份提供商。
我们已启动并运行 SSO,并且能够通过一个应用程序进行身份验证并顺利导航到另一个应用程序。现在,下一个要求是让应用程序 A 返回一个页面,该页面可以毫无疑问地对应用程序 B 进行 Ajax 调用。
现在,我们已经将前端通道设置为工作(通过浏览器重定向),然后当我们对应用程序 A 进行 Ajax 调用时,我们会收到 301 响应,并且 SP/IdP 之间的重定向开始,而 Ajax 显然不会遵循这一点。
另一方面,如果我们从应用程序 A 向应用程序 A 发出 Ajax 调用,那么它会通过其本地会话 ID 发送,并且无需发送重定向来与 IdP 进行通信。
现在,如果我通过浏览器手动导航到应用程序 B 并允许发生所有重定向(因此也检索应用程序 B 的本地会话 cookie)。然后我仍然无法从应用程序 A 的响应中发出 Ajax 请求。原因显然是,当我们访问应用程序 A 域上的页面时,浏览器不会发送应用程序 B 的 cookie 信息。 所以我的问题如下:
如果这不太清楚,我很抱歉,我现在真的无法很好地解释这一点。也许我最好解释一下我需要实现什么目标。
点击应用程序并使用 SSO 登录
现在,重定向怎么样?据我了解,您正在使用两个 SP(服务提供商),每个“子域”一个。如果是这样,则可以使用令牌对从网站 A 到网站 B 的请求(尽管有 CORS 和其他配置)进行身份验证(您可以添加此身份验证方法,以便如果存在令牌,则不需要其他身份验证 - 该请求通过了安全性层)。
现在,尽管有这个想法,关于重定向和保持会话,IdP/SP 交互提供了一个“身份”,但是一旦您的服务器收到它(在 SP 上),您就可以设置会话(例如可以通过cookie,...),验证权限,角色等。 那么,问题不在于 IdP/SP 交互,而在于会话验证。这里使用令牌可能是一个好主意,因为您想避免通过 JS 进行 cookie 管理(不安全)。
我希望这可以帮助您理解这个过程,以便您可以通过降低整体的复杂性来找到其他想法。