简化访问:深入理解SSO单点登录

概念

单点登录SSO(Single Sign On)是一种身份验证和授权机制,它允许用户只需登录一次,就能够访问多个相关但独立的系统或应用。

这种机制通过在用户登录时颁发令牌的方式实现,令牌包含有关用户身份和权限的信息,服务提供者可以通过验证这个令牌来确认用户的身份,而无需用户提供额外的凭证。

SSO的主要优点包括:

  1. 用户友好性:用户只需登录一次,即可访问多个应用程序,提供了更好的用户体验和便利性。
  2. 提高安全性:通过集中的身份验证,可以减少密码泄露和密码管理问题。此外,SSO还可以与其他身份验证机制(如多因素身份验证)结合使用,提供更强的安全性。
  3. 简化管理:SSO可以减少管理员的工作量,因为他们不需要为每个应用程序单独管理用户凭据和权限。

CAS认证授权机制

CAS (Central Authentication Service)是实现单点登录的一个标准化的过程,主要用于实现多个应用系统的统一身份验证。其核心思想是: 用户只需要在一个中央认证服务器上进行一次登录操作,即可获得访问所有已集成 CAS 的受保护资源的权限,无需在每个应用系统中单独登录。CAS 通过票据(Service Ticket(ST))的方式来管理用户的会话和认证状态。

CAS单点登录流程:

  1. 用户访问受保护资源:用户尝试访问一个受保护的资源,例如一个Web应用程序。
  2. 重定向到CAS服务器 :如果用户未登录或未携带有效的登录凭证(如票据),应用程序将重定向用户到CAS服务器的登录页面。
  3. 用户登录 :用户在CAS服务器的登录页面输入其凭据(通常是用户名和密码)。
  4. CAS服务器验证CAS服务器接收用户的凭据,并进行验证。如果凭据有效,CAS服务器将生成一个Service Ticket(ST)
  5. 发放Service TicketCAS服务器Service Ticket发送给用户。这个票据是一个随机生成的字符串,用于请求访问特定服务。
  6. 用户携带Service Ticket返回 :用户携带Service Ticket返回到原始应用程序。
  7. 应用程序验证Service Ticket :应用程序接收Service Ticket,并将其发送到CAS服务器验证票据的有效性
  8. CAS服务器响应验证结果 :如果Service Ticket有效,CAS服务器确认票据有效,并向应用程序提供用户的身份信息。
  9. 用户被授予访问权限 :应用程序接收到CAS服务器的确认后,将允许用户访问请求的资源。
  10. 用户访问其他服务 :用户在访问其他服务时,将重复步骤2至9,使用新的Service Ticket进行认证。
  11. 单点登出(可选操作) :如果CAS服务器支持单点登出,用户可以从任何服务发起登出请求,CAS服务器将使所有有效的Service Ticket失效,实现用户在所有服务中的登出。

单点登录技术实现

流程:

  1. 去往认证中心登录,输入账号密码进行登录
  2. 登录验证成功之后,在session表格中记录一条身份信息(sessionId(sid)身份信息(唯一id、账号等)的键值对)
  3. 记录之后,通过响应中的Set-Cookie头部将其发送给浏览器,浏览器则将sid保存在Cookie
  4. 之后访问子系统时,浏览器携带已有的sidCookie 到认证中心,认证中心去查session表格可有登录信息,查到就说明已经登录
  5. 告诉子系统用户登录
  6. 子系统访问受保护资源

只要这个session表格中有这条记录,就说明这个用户是登录成功的,没有则未登录,或者是过期

优点

  • 认证中心具有强控制力,拥有对用户的绝对控制:假如有用户进行了违规操作,直接处理session表格即可让其下线。

缺点

  • 成本高:网站用户量大,导致认证中心压力大,各种子系统都要发sid过来,session表格变得很大,可能需要session集群
  • 风险高:认证中心挂掉则所有系统都挂掉,可能还需要进行容灾

token模式

token模式是一种分布式的模式,子系统自己认证:

优点

  • 压力小:如果子系统用户量变大,几乎和认证中心无关。

缺点

  • 控制力弱:如果token时间过长,认证中心失去了对子系统的控制,无法指定用户下线。
  • 用户体验:如果token时间过短,需要频繁登录,影响用户体验。

token + refreshToken模式

  • 用户在认证中心登录后会颁发两个token:

    • 一个是所有子系统都能认识token(过期时间非常短,比如十几二十分钟)
    • 一个是只有认证中心才认识refreshToken(过期时间长,比如一周一个月)
  • 用户请求时带的是短的token,当这个token过期后,用户使用refreshToken向认证中心获取新的token,刷新token没有问题就颁发一个新的token给子系统

过一段时间需要进入一次认证中心,便于控制。

URL重定向传播会话

上面我们介绍了CAS认证的方式,在传统的CAS单点登录实现中,主要使用的是票据(Ticket)机制,而不是令牌(Token)机制。有一种常见的SSO实现技术,它并不依赖于特定的认证协议或机制比如CAS,但是大致流程如出一辙,就是使用 URL 重定向传播会话实现单点登录

这是一种通用的 SSO 实现策略,可以与不同的认证协议(如 CAS、OAuth2 + OIDC)结合使用,并不局限于某一种特定的技术或机制。

在这种实现中,当用户首次访问应用时,如果发现用户未登录,应用会重定向用户到认证中心服务器。用户在认证中心上登录后,服务器通过 URL 重定向将用户带回到原始应用,并附带一些认证信息(如授权码或ticket票据,票据有效时长很短)。

URL 重定向传播会话实现单点登录流程:

  1. 用户访问子系统,检查登录状况。

  2. 若未登录,用户跳转到子系统登录页面/sso/login,并携带back参数 记录初始页面URL。

    • 形如:http://{sso-client}/sso/login?back=xxx
  3. 子系统尚未登录,再次将其重定向至SSO认证中心,并携带redirect参数记录子系统的登录页URL。

    • 形如:http://{sso-server}/sso/auth?redirect=xxx?back=xxx
  4. 用户进入了 SSO认证中心 的登录页面,开始登录。

  5. 用户 输入账号密码 并 登录成功,SSO认证中心再次将用户重定向至子系统的登录接口/sso/login,并携带ticket码参数。

    • 形如:http://{sso-client}/sso/login?back=xxx&ticket=xxxxxxxxx
  6. 子系统根据 ticket码 请求接口,从服务端获取账号id,并在子系统进行登录。

  7. 子系统将用户再次重定向至最初始的 back 页面。

整个过程在第一次登录时,第四步需要手动执行登录,其他步骤全部自动化,之后访问其他子系统时,由于认证中心已登录,则整个过程全部自动化。

今天的分享就到这里,希望可以帮助到你!假如你对文章感兴趣,可以来我的公众号:小新学研社

相关推荐
崔庆才丨静觅4 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60614 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了4 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅5 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅5 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅5 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment5 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅6 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊6 小时前
jwt介绍
前端
爱敲代码的小鱼6 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax