简化访问:深入理解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 页面。

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

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

相关推荐
也无晴也无风雨25 分钟前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
Martin -Tang1 小时前
Vue 3 中,ref 和 reactive的区别
前端·javascript·vue.js
FakeOccupational2 小时前
nodejs 020: React语法规则 props和state
前端·javascript·react.js
放逐者-保持本心,方可放逐3 小时前
react 组件应用
开发语言·前端·javascript·react.js·前端框架
斑驳竹影3 小时前
【RabbitMQ】之高可用集群搭建
分布式·rabbitmq
曹天骄4 小时前
next中服务端组件共享接口数据
前端·javascript·react.js
阮少年、4 小时前
java后台生成模拟聊天截图并返回给前端
java·开发语言·前端
floret*4 小时前
Kafka高频面试题详解
分布式·kafka
Wlq04154 小时前
分布式技术缓存技术
分布式·缓存
明达技术5 小时前
LVDS高速背板总线:打造分布式I/O高效数据传输新境界
分布式·物联网·自动化·lvds