SSO:单点登录(Single Sign-On)

SSO:单点登录(Single Sign-On)

简介

只登录一次,后续访问多个受保护系统时,不再重复输入用户名和密码。

SSO 的登录过程,本质上是一次“凭证交换”:通过认证中心(AAM),获取一次性认证凭证。使用一次性认证凭证,换取一个可在后续请求中复用的身份上下文,该上下文通常通过 Cookie 或 Authorization 机制体现。

流程

  1. 访问业务系统(未登录)
  2. 跳转认证中心
    1. 已登录,直接到第四步
    2. 未登录,展示登录界面
  3. 认证中心完成登录
  4. 带凭证跳回业务系统
  5. 业务系统校验(业务系统向认证中心校验ticket)
  6. 访问业务系统(已登录)

PS

  1. 为什么“一次性凭证”必须是一次性的?

答: 如果一次性凭证不是一次性的,SSO 在完全不安全。一次性凭证本质上是“登录成功的临时证明”。

如果他被重复利用,攻击者拿到凭证就可以你的完整登录状态。

因此,凭证一般是“一次性”+“短时有效(几十秒)”

  1. 为什么 SSO 强制用 302,而不是 200?

答: 如果用200,认证中心返回200后,客户端仍然停留在认证中心域,Cookie也只能属于当前域。

使用302后,强制客户端对另一个 URL 发起一次全新的请求,这样才能完成:

  • 客户端访问业务系统
  • 携带一次性凭证
  • 业务系统完成校验
  • 建立自己的登录态
  1. 为什么 POST 登录后,被 302 成 GET?

答: POST 只用于“提交凭证”,登录完成后,系统必须回到一个“幂等、安全、可重放”的 GET 资源访问。

即是Post/Redirect/Get(PRG)模式,刷新安全,地址干净,状态清楚,GET可缓存。