single-sign-on - SAML SSO 是如何工作的?

标签 single-sign-on saml saml-2.0

假设我们有一个托管在 tomcat 上的名为 A 的服务提供商应用程序,用户单击指向 SPA 的链接。SPA 发现没有提供 token ,因此它将用户重定向到 IdP 进行身份验证(使用 SAML Authn 请求)通过某种方式提供)。然后,IdP 将用户重定向到提供凭据的某个通用登录页面,假设这些凭据正确,IdP 将使用 token 和有关主题的一些断言创建 SAML 响应,并将其发送回 SPA。SPA 会看到这一点并允许用户访问应用程序。太棒了!

我有几个问题

  1. 授权请求/响应是如何发送的,我知道有一个重定向绑定(bind)和一个 POST 绑定(bind),其中 SAMLResponse 和请求被编码为查询参数,或者在 POST 绑定(bind)的情况下作为 XHTML 表单发送。但我不确定哪个用在哪里?
  2. 服务提供商是提供服务的实体,例如 Office 365 或销售人员。每个服务提供商都是独立的吗?当我观看视频时,我问这个人说服务提供商是托管这些服务的人,所以我不确定这里的正确答案是什么?
  3. token 如何存储在客户端?例如,我现在针对 SP A 进行了身份验证,然后用户尝试从同一计算机/浏览器窗口使用 SP B,SP B 和 IdP 如何知道用户已经通过身份验证,因此不需要重新进行身份验证认证。 IE。它的 SSO 方面。
  4. SP B 是否需要托管在同一个 tomcat 实例上才能正常工作?

最佳答案

我投入了大量时间来让 SSO 为我工作。最有帮助的文档是 this specification

以下答案基于此经验:

  1. 根据相应的 HTTP 请求 header 使用重定向或后绑定(bind)。建议使用 Post 绑定(bind),因为它并不意味着对传输数据量的限制。
  2. 在此上下文中,服务提供商是指客户请求的任何东西。可能有很多参与同一个 SSO 方案。
  3. 服务提供商必须具有 SSO 意识,其中包括处理身份验证响应数据。通常您不必实现该协议(protocol) - 您的 SP 可以利用现成的框架。
  4. 服务提供商可能驻留在不同的服务器上。

关于single-sign-on - SAML SSO 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50587305/

相关文章:

xml - SAML SP 元数据 XML SSO、收件人和目标 URL

authentication - 在 Web 单点登录中针对客户端 Active Directory 进行身份验证

curl - 使用 CURL 向 SAML 服务器进行身份验证

windows - Ruby:在 Windows 上获取当前登录的用户

java - SAP JCo SAML 身份验证

jboss - 如何在jboss中使用saml picketlink进行身份验证?

ruby-on-rails - 修改设计 SAML 属性

saml - 为什么 SAML 服务提供商应该信任 SAML 响应?

spring-security - 如何在运行时在spring-SAML中添加新的idp元数据

saml - 配置 Ping Federate 和 Spring SAML 以验证应用程序