SSO - 当用户单击“注销”时会发生什么

信息安全 sso
2021-08-25 16:46:07

我们正在增加企业通过外部单点登录提供程序配置登录到我们的 Web 应用程序的能力(最初通过 WS-FED,但是,未来的版本将支持其他协议)。用户名/密码身份验证也可用于没有/想要配置外部 SSO 提供程序的客户,并且在 SSO 提供程序出现问题的情况下也可作为后备。

当用户在我们的应用程序中单击“注销”按钮时会发生什么?

  • 它们仅从我们的应用程序中注销,以便通过 SSO 提供程序进行身份验证的其他应用程序仍然可用。
  • 如上所述,但我们另外要求 SSO 提供者重新进行身份验证。
  • 他们已完全退出其 SSO 提供程序
4个回答

这是可用性和安全性导致完全不同答案的地方之一。

从可用性的角度来看,我观察到以下论点:

  • 当我在站点 a上注销时,我只在此处注销表单,我可以继续使用我仍然登录的其他位置。
  • 当我在站点 a上按注销时,我实际上只被重定向到站点 b(门户),并且只有当我从那里注销时,我才真正注销。(主要用于 Intranet 或类似环境的上下文中)

从安全的角度来看,我观察到以下论点:

  • 当用户注销时,立即使该用户的所有会话无效,并将他/她/它从 SSO 的任何和所有系统部分注销。
  • 当用户注销时,通知 SSO 提供商并且不允许任何新会话和注销当前应用程序。但在 SSO 中没有隐式注销所有系统。(通常通过较短的会话时间/cookie 生命周期来缓解)。由于所涉及的技术(和/或许可证),这可能是技术限制

在我使用的大多数 SSO 身份验证系统中,注销通常意味着注销身份验证提供程序和所有连接的系统。

在一些编写不佳的应用程序和 SSO 系统中,应用程序可能会缓存身份验证,并且可能不会注意到他们正在使用的会话已经过期,但应用程序应该定期重新检查会话有效性以防止这种情况长期存在。更好的 SSO 系统能够回发到应用程序,强制它们立即注销,而不是依赖于应用程序定期检查。

这里可能没有正确的答案,但我主张“注销”仅适用于您的网站。

以堆栈交换为例

我使用“使用 Google 登录”选项。当我单击注销时,我看到:

堆栈交换中的注销“菜单”

笔记:

  1. 它表明我将退出所有 Stack Exchange 域。
  2. 我可以选择仅将我从该设备或所有设备中注销。(我假设是删除本地浏览器缓存与无效服务器端会话)。
  3. 退出 SE 后,我的 gmail 选项卡继续工作。

一些我不满意的原因

他们已完全退出其 SSO 提供程序

可用性

如果我在笔记本电脑上退出 Stack Exchange 并且一段时间后发现我的手机已被踢出我的 Google 帐户,导致我错过紧急电子邮件、聊天、未同​​步的 Google 文档等,我会非常恼火。

安全

如果注销一项服务导致我从 SSO 提供商注销,这是否可以视为拒绝服务攻击向量?即,流氓 Stack Exchange 员工可以让我的浏览器让我退出所有 Google 服务吗?是否会增加第 3 方站点中 XSS 漏洞的影响?即这是否以任何方式链接两个不相关站点的安全性,只是因为它们使用相同的 SSO 提供程序?(我需要再考虑一下)

当对“注销”按钮的用途感到困惑时,就会出现这样的问题。

“登出”有什么用?

一些先决条件:

  • 可用性方面,如果用户不想退出,他们不应该使用这个按钮。
  • 如果无法信任提供注销按钮的网站,那么注销实际上所做的事情是没有实际意义的。
  • “注销”不应与“切换帐户”混淆。尽管可以通过注销并再次登录来模拟“切换帐户”,但在“注销”按钮的设计中不应优先考虑此用例的可用性。由于缺少“切换帐户”按钮而出现的可用性问题正是由于缺少,并且不是“注销”按钮的功能的错。

“登出”有什么用?

当浏览器在物理共享的 PC 中使用时,用户需要以某种方式清除他们的会话,以便之后使用同一台 PC 的其他用户也无法访问相同的会话。

因此,“注销”应该:

  1. 使所用网站上的会话无效
  2. 退出 SSO 提供程序

如果“注销”按钮的实施省略了第二个项目符号,则其他用户可以使用仍处于活动状态的 SSO 提供程序会话简单地 SSO 回到网站。

注意:“退出 SSO 提供商”并不意味着立即退出使用同一 SSO 提供商登录的每个网站。每个网站都有自己的独立会话,因此在退出 SSO 提供程序后,某些网站可能会很好地访问。 注销使用同一 SSO 提供商登录的每个网站超出了单个网站的“注销”按钮的范围。