服务提供商使用 SAML 启动 SSO 登录

Service provider inittiated SSO login using SAML

SAML 请求是每次都在需要某些身份验证时发送给 IdP,还是首先检查存储在浏览器 cookie 中的会话并在找到会话时自动进行身份验证?

通常,SP 会在用户首次向该 SP 进行身份验证时存储一个会话。如果 SP 需要对用户进行身份验证,它首先会查找本地会话。但是,如果用户在一个 SP 有一个会话,然后尝试访问第二个 SP 的资源,那么这个 SP 将没有来自第一个 SP 的本地会话,并且需要向 IDP 发送 authnrequest。

据我所知,这在 SAML 规范中没有规定,但它通常是如何完成的。

要访问 Web 应用程序 (SP),您通常需要向其出示一些东西以证明您有权访问它。通常此权利是 username/password 组合。一旦 SP 验证了您的权利(可能将 username/password 与 db 进行比较),它会根据 SP 的政策为您生成一个有时间限制的会话。

当您使用 SAML 访问 SP 时,您没有 username/password。在这种情况下,您的权利来自您的 IdP 发布给 SP 的属性。一旦 SP 验证了您的属性,它就会生成您的会话,这与您从 username/password 验证中获得的会话类型完全相同。

SP 可以通过多种方式再次向 IdP 询问属性:

  • SP 的本机会话已过期,您的 SAML 属性已过期(它们还有生存时间)。
  • 您的 SAML 属性已过期。在高度安全的 SP 中可能就是这种情况,您可能只有一个小时的许可。您的 SAML 属性的 TTL 可能只有一小时。然后 SP 会要求您的 IdP 提供您的属性以刷新您的权利。

如果 SP 的本机会话过期但您的 SAML 属性仍然有效,它可能会选择不询问您的 IdP,而是根据您当前的 SAML 属性创建一个新会话。这完全取决于 SP 的安全策略。

如果您转到另一个 SP,您通常不必再次在您的 IdP 进行身份验证,因为您的 IdP 可能会在您登录第一个 SP 后为您建立一个会话,并且只会将您的属性释放给第二个 SP .