文章目录[隐藏]

  • 一.单点登录概念
  • 二、CAS的原理
  • 三.认证过程
  • A.第一次访问受限资源时
  • 第二次访问系统
  • C.第一次访问其他系统
  • 四、淘宝单点登录系统架构的设计与实现
  • 一、同步登录状态
  • B.检查登录状态
  • C.核实账单
  • 动词 (verb的缩写)SSO实战

淘宝登录(淘宝登录入口)021-07-30 13: 54熬夜码农

单点登录被定义为在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

一.单点登录概念

二、CAS的原理

三.认证过程

A.第一次访问受限资源时

第二次访问系统

C.第一次访问其他系统

四、淘宝单点登录系统架构的设计与实现

一、同步登录状态

B.检查登录状态

C.核实账单

动词 (verb的缩写)SSO实战

一.单点登录概念

在单个web系统中,客户端和服务器只建立一个会话,成功登录后只需要写一个Cookie。每个请求都携带Cookie,服务器只验证Cookie是否有效,以便判断是否登录。

随着业务的增长,出现了其他应用系统,每个系统只维护自己的会话,这将导致以下问题:

每个系统都要维护一套认证逻辑,导致冗余;

跨系统后,认证信息会失效,这就需要各系统之间的兼容性。

因此,需要对常用模块进行抽象,形成一个通用的认证系统,承担所有业务系统的登录认证功能,即单点登录(SSO)系统。

对认证系统进行抽象后,单点登录系统需要完成两个主要任务,即维护全局会话和维护本地会话。客户端与业务系统之间有一个本地会话,与单点登录系统之间有一个全局会话。单点登录系统分为两部分,单点登录服务器和单点登录客户端。服务器是单点登录认证系统。客户端将被集成到业务系统中,并负责添加、删除和验证本地会话。

二、CAS的原理

基本上所有的SSO系统都可以向CAS学习。

CAS的整体架构分为客户端和服务器端。客户端支持多种服务器应用,也支持多种语言,包括GO、Python、PHP和Java。可以看出,它支持市场上的主要语言。

服务器的技术实现首先是Spring MVC+Spring Web Flow,主要用于组件的串行执行,其次是票据组件、认证组件、认证组件支持的存储容器,可以是LDAP、数据库、活动目录。基本上,身份验证的思想是关系数据库与Redis或Memcached相结合。

三.认证过程

A.第一次访问受限资源时

第一次访问时,重定向到SSO服务器登录页面,将登录表单返回浏览器,用户提交用户名和密码,SSO服务器验证,用票证重定向成功后,SSO客户端、客户端和SSO验证票证有效性,返回验证信息,SSO客户端写入本地会话cookie,重定向回原地址,业务系统返回资源。

如果登录,直接跳转,即执行:

response.sendRedirect(urlToRedirectTo);

第二次访问系统

第二次访问系统时,域名下会有上一步写的cookie,请求系统时会携带cookie,所以所有过滤器都不会拦截请求,直接返回资源。

C.第一次访问其他系统

系统域名下没有本地会话,所以重定向到SSO服务器,SSO服务器会发现这个客户端已经登录,生成所有的票证,客户端和SSO验证票证的有效性并返回验证信息,SSO客户端写入本地会话cookie,重定向回原地址,业务系统返回资源。

四、淘宝单点登录系统架构的设计与实现

淘宝的SSO系统颇具创新。除了检查登录状态模块,还增加了同步登录状态模块,使得电子商务项目在SSO中灵活。

一、同步登录状态

在静态页面中,后台数据将被异步请求,然后被同步登录状态的单点登录客户端过滤器截获。如果需要同步登录状态,过滤器会重定向到login.taobao.jump界面,无论用户是否登录,都会重定向回SSO客户端界面,在以下两种情况下会发生跳转:

本地会话的Cookie不存在。

Cookie存在但无效,全局会话有效。

除了令牌参数之外,跳转还将携带源地址rederectUrl。

B.检查登录状态

当用户请求需要登录的数据资源时,它将被检查登录状态的过滤器拦截。出现以下两种情况:

如果没有登录,同步跳转请求将被直接重定向到登录页面。

异步Ajax请求将直接返回登录状态、rederectUrl和loginUrl,并跳转到JavaScript控制下的登录地址。

C.核实账单

如果单点登录服务器登录成功,会将令牌请求携带回单点登录客户端,客户端会验证令牌的过滤拦截请求,并与单点登录服务器验证令牌的有效性。如果是,用户的基本信息、cookie值等。,所有cookie值都由SSO服务器发送。

动词 (verb的缩写)SSO实战

目标:基于令牌并支持跨顶级域的单点登录系统。

涉及系统:

登录中心:SSO系统,负责处理所有SSO逻辑,域名为localhost:6061。

服务A:特定的服务系统需要通过SSO系统登录,域名假设为localhost:6060。

服务B:特定的服务系统需要通过SSO系统登录,域名假设为localhost:7070。

对于业务系统A或者业务系统B,用户可以通过登录中心进行登录,用户只需要登录业务系统A或者业务系统B中的任意一个,其他业务系统都可以从登录