假设我们有一个托管在 tomcat 上的名为 A 的服务提供商应用程序,用户单击指向 SPA 的链接。SPA 发现没有提供 token ,因此它将用户重定向到 IdP 进行身份验证(使用 SAML Authn 请求)通过某种方式提供)。然后,IdP 将用户重定向到提供凭据的某个通用登录页面,假设这些凭据正确,IdP 将使用 token 和有关主题的一些断言创建 SAML 响应,并将其发送回 SPA。SPA 会看到这一点并允许用户访问应用程序。太棒了!
我有几个问题
- 授权请求/响应是如何发送的,我知道有一个重定向绑定(bind)和一个 POST 绑定(bind),其中 SAMLResponse 和请求被编码为查询参数,或者在 POST 绑定(bind)的情况下作为 XHTML 表单发送。但我不确定哪个用在哪里?
- 服务提供商是提供服务的实体,例如 Office 365 或销售人员。每个服务提供商都是独立的吗?当我观看视频时,我问这个人说服务提供商是托管这些服务的人,所以我不确定这里的正确答案是什么?
- token 如何存储在客户端?例如,我现在针对 SP A 进行了身份验证,然后用户尝试从同一计算机/浏览器窗口使用 SP B,SP B 和 IdP 如何知道用户已经通过身份验证,因此不需要重新进行身份验证认证。 IE。它的 SSO 方面。
- SP B 是否需要托管在同一个 tomcat 实例上才能正常工作?
最佳答案
我投入了大量时间来让 SSO 为我工作。最有帮助的文档是 this specification
以下答案基于此经验:
- 根据相应的 HTTP 请求 header 使用重定向或后绑定(bind)。建议使用 Post 绑定(bind),因为它并不意味着对传输数据量的限制。
- 在此上下文中,服务提供商是指客户请求的任何东西。可能有很多参与同一个 SSO 方案。
- 服务提供商必须具有 SSO 意识,其中包括处理身份验证响应数据。通常您不必实现该协议(protocol) - 您的 SP 可以利用现成的框架。
- 服务提供商可能驻留在不同的服务器上。
关于single-sign-on - SAML SSO 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50587305/