2024年9月24日
CAS与JWT的区别
CAS和JWT的主要区别在于它们的认证机制、数据存储位置、适用场景以及安全性方面。
- 认证机制和数据存储位置:
- CAS(Central Authentication Service)是一种基于代理票据的单点登录(SSO)认证系统。它通过一个中心认证服务器来管理用户的登录状态和授权信息,各个应用服务器都与该中心认证服务器进行通信。用户信息存储在服务端的session中12。
- JWT(JSON Web Token)则是一种开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,在各方之间安全地传输信息作为JSON对象。在JWT的认证机制中,用户信息以token的形式存在客户端,通常存储在本地存储或HTTP header中23。
- 适用场景:
- CAS更适合于大型企业或组织,其中存在多个应用服务器,需要一个中心化的认证服务来管理用户的登录状态。CAS的部署和维护成本相对较高,因为它需要一个独立的认证服务器和客户端的配置12。
- JWT则更适合于微服务架构或分布式系统,因为它可以轻松地在不同的服务之间传递用户身份信息,且不需要中心化的认证服务。JWT的优点包括跨域使用、无需服务器存储状态等2。
- 安全性:
- CAS的安全性依赖于中心认证服务器的安全配置,包括防止SQL注入、XSS攻击等。用户信息存储在服务端,相对较难被篡改1。
- JWT的安全性依赖于数字签名,通过在JWT生成时添加签名,并在验证时检查签名的完整性来确保token未被篡改。JWT是自包含的,包含了所有必要的信息,因此可以轻松地在不同服务之间传递23。
综上所述,CAS和JWT各有其优势和适用场景。选择使用哪一种技术取决于具体的应用需求、系统架构以及安全要求等因素
CAS – Central Authentication Server
CAS 全称 Central Authentication Server,也称作中央认证服务,是支持 JWT 的。
其分为两个部分:CAS 服务端(CAS Server) 和 CAS 客户端(CAS Client)。服务端负责认证工作,独立部署;客户端负责处理访问请求,需要登录时,重定向到服务端。
认证流程
- 浏览器向客户端请求提供某个受保护的资源。
- 重定向到服务端进行认证
- 用户进行身份认证
- 服务端生成票据
- 客户端向服务端验证票据
- 验证成功返回用户信息
02
JWT – JSON Web Token
JWT 是一种用于在两方之间安全地表示声明的方法,是 token 思想的一种实现方式。
组成部分
本质上就是一个字符串,但是其带有签名信息,接收后可以校验是否正确或是否被篡改等。JWT 组成分为三个部分,每个部分用点号连接,像是这样:
HEADER.PAYLOAD.SIGNATURE
- HEADER:用于声明 算法 和 token 类型,alg 表明算法是 HS256,typ 表明类型是 JWT,如下:
{
"alg": "HS256",
"typ": "JWT"
}
- PAYLOAD:存放所需传递的数据,有默认字段也可以自定义私有字段(这是未加密的,仅进行了编码,只能传递非敏感的信息),如下:
{
// 自带的默认字段
"iss": "发行人",
"exp": "到期时间",
"sub": "主题",
"aud": "用户",
"nbf": "在此之前不可用",
"iat": "发布时间",
"jti": "ID用于标识JWT",
// 自定义的字段
"name": "Tom",
"admin": true
}
- VERIFY SIGNATURE:结构如下,将 HEADER 、PAYLOAD 、secret密钥 三个部分分别进行 base64UrlEncode 的操作(secret 可以不 encode),然后使用自己所选的算法(在 HEADER 中指定)进行计算,得出的结果便是此部分的内容。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload) + "." +
secret 或者 base64UrlEncode(secret)
)
认证流程
1. 客户端(浏览器)向服务端发送账号密码请求登录
2. 服务端校验账号密码并生成 JWT Token 将其返回
3. 客户端(浏览器)保存 JWT Token,下次需要请求时将其携带
4. 服务端校验 JWT Token 信息(像 VERIFY SIGNATURE 部分一样进行相同操作,取出 header 和 payload 并加上 secret 一同进行 encode,然后比对此部分是否一致),然后验证有效性、是否过期等等,通过后返回业务数据
5. 客户端(浏览器)收到业务数据,进行处理并使用
