SSO:SP 是否应该在每个请求中验证与 IDP 的会话

SSO : Should SP validate session with IDP in every request

根据 SP 发起的 SSO 流程,用户尝试访问 SP。由于用户未经身份验证,他被重定向到 IDP,在那里他输入他的凭据,post 成功登录,IDP 在用户的浏览器中设置 cookie(在 IDP 的域下)并使用 SAML 响应将用户重定向回 SP。一旦 SP 验证了 SAML 响应,它就会创建自己的 cookie/token 并在 sp 域下的用户浏览器中设置。

在后续请求中理想情况下应该发生什么:

  1. SP 是否应该只依赖它自己的 cookie 来获取用户信息
  2. SP 是否应在每个请求中验证与 IDP 的用户会话。

如果建议使用 选项 1,从安全的角度来看是否可以,因为 post 登录时 SP 和 IDP 之间没有通信以进行进一步的请求。

如果建议选项 2,则在每个请求中调用 IDP 都会产生开销,这可能会影响 SP 的性能。

请在这里提出理想的流程。

如果建议选项 1,从安全的角度来看是否可以,因为 post 登录时 SP 和 IDP 之间没有通信用于进一步的请求。

[ME] 是的,验证 cookie 应该是 SP 的责任(可能用其中的所有详细信息加密或通过指向持久存储区域的 ID 引用)。 IDP 的工作是提供已经完成的身份。

如果建议选项 2,则在每个请求中调用 IDP 都会产生开销,这可能会影响 SP 的性能。

[ME] 是的,用 IDP 验证用户会话太过分了。它的工作方式是 - 如果 SP 会话已失效或正在创建,请转到 IDP,如果 IDP cookies/session 有效,则提供 SAML response/assertion 或者进行身份验证,如果不是,最后 SP 创建一个新会话。

HTH.

因此用户已被身份提供者 authorized/authenticated。怕这个authorization/authentication突然过期吗?例如,也许 IdP 属于用户的雇主,当用户被解雇时,立即撤销对 SP 的访问是否至关重要?也许用户发现他的凭据已被盗,因此 closes/blocks 他的 IdP 帐户,您是否也希望能够停止您的 SP 会话?您只能在选项 1 中执行这些操作,因此这是更安全的选项。

正如您所说的那样,这会带来很多开销。所以问题基本上是,一旦用户的 IdP 帐户被撤销,您的 SP 会话立即终止对您有多重要。

顺便说一下,我不喜欢 IdP 将会话存储在 cookie 中。在我看来,他不应该这样做,尤其是如果您实施了选项 2。原因是这使得注销变得非常棘手:用户现在应该记住在 SP 和 IdP 上注销,而他只需要登录一次。