SAML是如何解决SSO的?

How does SAML solve SSO?

在阅读了一些关于 SAML 的文章(包括 "SAML for dummies," 和 SAML wiki 文章)之后,我仍然完全不清楚 SAML 如何真正解决 SSO 问题。假设我以 Google 帐户为例。我的理解是,如果我转到 GMail 并且实施了 SAML,我将被重定向到一个 IDP,比方说,它是 Google 的登录权限。然后我的浏览器通过重定向转到那里,并要求我登录。在提供正确的登录信息后,我 return 使用令牌和 SAML 响应使用 Google 加密的 GMail 登录的私有密钥,然后使用 GMail 的 public 密钥对其进行身份验证,从而验证我实际上就是我所说的人。

让我感到困惑的是,这似乎解决了第一次登录或进入单个应用程序的问题,但我不明白当我现在去 Google Drive 时会发生什么.即使我的浏览器将 SAML token/response 保存为 cookie,我也必须在令牌过期后再次登录,据我所知,大约是 2 分钟后。此外,即使在同一个应用程序中,对单独资源或端点的请求似乎也会以相同的方式超时。

我得到的唯一提示是,根据 wiki 文章,第 1 步在 SP 检查中有目标资源 "a valid security context." 但是,如果 GMail 和 Drive 是单独的应用程序,它们不与Drive 怎么知道我已经有一个有效的安全上下文?

问题:

  1. 初始身份验证后,需要将哪些信息与以后的请求一起发送到相同或不同的 application/endpoint?例如,SAML 断言可能已保存并随每个请求重新发送。
  2. 这个信息怎么样secured/verified?
  3. 什么超时与 SAML 的 SSO 相关联,以及如何在 SP 和 IDP 端强制执行超时?

您缺少的是 Idp(Google 在您的示例中的登录页面)在第一次登录时设置了一个会话 cookie。当您作为第二个应用程序访问 Google 驱动器时,它确实不知道 gmail 会话。 Google 驱动器重定向到 idp 以获得身份验证。

现在,由于 idp 域上的 cookie,idp 有一个活动会话。这使得 idp 可以使用从持久会话信息生成的新断言回复 google 驱动器。

你是对的,每个断言通常只有效几分钟,但这不是问题,因为 idp 可以为每个应用程序创建一个新的断言。

对于超时:Idp 可以在断言中设置 SessionNotOnOrAfter 条件,以告知 SP 它必须在给定时间终止会话。