本文目录导读:
《深入解析CAS单点登录与Token:从单点登出原理看二者的区别》
CAS单点登录概述
(一)CAS工作流程
1、用户访问
- 当用户首次访问一个受CAS保护的应用(称为服务提供商,Service Provider,SP)时,由于没有有效的票据(Ticket),SP会将用户重定向到CAS服务器(Central Authentication Server)的登录页面。
图片来源于网络,如有侵权联系删除
2、身份验证
- 在CAS服务器上,用户输入用户名和密码进行身份验证,如果验证成功,CAS服务器会创建一个包含用户身份信息的票据(TGT,Ticket - Granting Ticket),这个TGT是与用户会话相关联的,并且存储在CAS服务器端。
3、票据授予
- CAS服务器会为用户生成一个ST(Service Ticket),这个ST是专门针对用户要访问的SP的,然后将用户重定向回SP,并在重定向的URL中携带这个ST。
4、服务验证
- SP接收到带有ST的请求后,会拿着ST到CAS服务器进行验证,CAS服务器验证ST的有效性,如果有效,则向SP返回用户的身份信息,SP根据这些信息允许用户访问相应的资源。
(二)CAS单点登出原理
1、全局登出请求
- 当用户在一个SP上发起登出操作时,SP会向CAS服务器发送一个登出请求,这个请求包含了用户的相关标识(如TGT标识等)。
2、清除相关票据
- CAS服务器收到登出请求后,会根据请求中的标识找到对应的TGT,并将其标记为无效,CAS服务器还会维护一个已登出的TGT列表。
3、通知相关SP
- CAS服务器会查询与该TGT相关联的所有ST,并向这些ST对应的SP发送通知,告知它们用户已经登出,SP收到通知后,会清除本地与该用户相关的会话信息,例如清除在本地缓存的用户身份信息、权限信息等,从而实现单点登出。
Token相关概念
(一)Token的定义与生成
1、定义
图片来源于网络,如有侵权联系删除
- Token是一种用于表示用户身份或者授权的字符串,它可以包含用户的身份信息、权限信息等经过加密或者编码后的数据。
2、生成方式
- 通常是由服务器端的认证服务生成,在基于JSON Web Token(JWT)的认证系统中,服务器会使用一个密钥(Secret),结合用户的一些信息(如用户ID、用户名、角色等),通过特定的算法(如HS256算法)生成一个签名的Token,这个Token可以在不同的服务之间传递,以证明用户的身份和权限。
(二)Token的验证与使用
1、验证过程
- 当客户端携带Token请求服务时,服务端会首先对Token进行验证,如果是JWT,服务端会使用相同的密钥按照与生成时相反的操作对Token进行解密和验证签名,如果签名验证通过,说明Token没有被篡改,然后服务端可以解析出其中包含的用户身份和权限信息。
2、基于Token的访问控制
- 根据解析出的用户权限信息,服务端可以决定是否允许客户端进行相应的操作,如果Token中表明用户只有只读权限,那么当客户端请求写入操作时,服务端会拒绝该请求。
CAS单点登录与Token的区别
(一)架构差异
1、CAS单点登录架构
- CAS是一个集中式的认证架构,有专门的CAS服务器作为中央认证中心,多个SP依赖于CAS服务器进行身份验证和授权,这种架构下,所有的身份验证逻辑集中在CAS服务器,SP只需要与CAS服务器交互来获取用户身份信息。
2、Token架构
- Token架构相对更加分散,每个服务都可以独立生成和验证Token,虽然可能存在一个专门的认证服务来生成Token,但验证可以在各个需要使用用户身份信息的服务中进行,在微服务架构中,不同的微服务可以根据自己的需求验证Token中的权限信息。
(二)单点登出实现方式的区别
1、CAS单点登出
图片来源于网络,如有侵权联系删除
- 在CAS单点登出中,是通过CAS服务器统一管理票据(TGT和ST)来实现的,当用户在一个SP登出时,CAS服务器会清除全局的TGT,并通知所有相关的SP清除本地会话,这种方式确保了在多个SP之间的登出一致性,只要与CAS集成的SP都能及时收到登出通知并处理。
2、Token的登出挑战
- Token本身没有像CAS那样内置的单点登出机制,由于Token是分布式的,可能被多个服务使用,如果要实现登出,一种常见的方法是在服务端维护一个Token黑名单,当用户登出时,将对应的Token加入黑名单,但是这种方法存在一些问题,比如如何在多个服务之间同步黑名单,以及黑名单可能会无限增长等。
(三)安全性方面的区别
1、CAS安全性
- CAS通过票据(TGT和ST)的方式来保证安全性,TGT在CAS服务器端存储并且有一定的有效期和安全策略,ST是一次性使用的票据,并且在传输过程中通常是加密的,CAS服务器和SP之间的通信也可以采用加密协议,如HTTPS,来防止信息泄露。
2、Token安全性
- Token的安全性取决于其生成和验证算法以及传输过程中的保护,如果使用强加密算法(如JWT中的HS256)并且在传输过程中采用安全协议(如HTTPS),可以保证一定的安全性,如果Token被窃取,由于它包含了用户身份和权限信息,攻击者可能会利用它来访问相应的资源,除非服务端及时将其加入黑名单或者采用其他防范措施。
(四)适用场景的区别
1、CAS适用场景
- CAS适用于企业内部多个应用系统的单点登录集成,特别是当这些应用系统有统一的管理和安全策略要求时,一个大型企业内部的办公系统、人力资源管理系统、财务系统等,可以通过CAS实现用户一次登录,在各个系统中无缝切换访问。
2、Token适用场景
- Token更适合于分布式系统、微服务架构和跨域的身份认证,在微服务架构中,不同的微服务可能由不同的团队开发和部署,使用Token可以方便地在各个微服务之间传递用户身份和权限信息,而不需要依赖于一个集中式的认证服务器,在跨域的场景下,Token可以很容易地在不同的域之间传递,只要遵循相应的安全协议。
评论列表