JWT单点登录是什么
JWT 单点登录概述
- 定义:
- JWT 单点登录(Single Sign-On, SSO)是一种利用 JWT 作为令牌的认证机制,允许用户一次登录后,在多个关联系统或应用间共享身份,无需重复登录。
- 核心组件:
- JWT:轻量、跨域的令牌,包含用户身份信息。
- SSO:集中式认证,统一管理用户会话。
核心点
- JWT SSO 通过令牌实现跨系统认证,简化用户体验。
1. JWT 和 SSO 基本概念
(1) JWT(JSON Web Token)
- 结构:
- Header:元数据(如签名算法)。
- Payload:用户信息(如
user_id
、roles
)。 - Signature:签名验证完整性。
- 格式:
Header.Payload.Signature
(Base64 编码)。 - 特点:
- 无状态:服务端不存会话,验证靠签名。
- 跨域:适合分布式系统。
- 示例:
eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE3Mjg3NzEyMDB9.dQw4w9WgXcQ
(2) 单点登录(SSO)
- 原理:
- 用户登录认证中心(SSO Server),获取全局令牌。
- 令牌在各子系统验证,共享身份。
- 优势:
- 一次登录,多系统访问。
- 统一用户管理和退出。
2. JWT 单点登录工作原理
流程
- 用户登录:
- 用户向 SSO 服务器提交凭证(如用户名、密码)。
- 验证通过后,生成 JWT(含用户 ID、过期时间等)。
- 分发 JWT:
- SSO 服务器返回 JWT 给客户端(浏览器或应用)。
- 客户端存储 JWT(如 Cookie、LocalStorage)。
- 访问子系统:
- 客户端携带 JWT 请求子系统(如 API 或服务)。
- 子系统验证 JWT(检查签名和过期时间)。
- 认证结果:
- 验证通过,允许访问;否则拒绝或重定向登录。
- 单点退出:
- SSO 服务器失效 JWT(如加入黑名单),通知子系统。
图示
用户 --> [登录 SSO 服务器] --> 返回 JWT
用户 --> [携带 JWT 访问子系统 A] --> 验证通过
用户 --> [携带 JWT 访问子系统 B] --> 验证通过
示例(伪代码)
// 客户端登录
POST /sso/login
{
"username": "alice",
"password": "123"
}
// 返回
{
"token": "eyJhbGciOiJIUzI1NiJ9..."
}
// 访问子系统
GET /api/resource
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
// 子系统验证
if (verifyJWT(token, secret)) {
grantAccess();
}
3. JWT SSO 的关键点
- 集中认证:
- SSO 服务器统一验证,子系统信任 JWT。
- 跨域支持:
- JWT 基于 HTTP 头(如
Authorization: Bearer
),适合前后端分离。 - 安全性:
- 使用 HMAC 或 RSA 签名,防篡改。
- 短有效期 + 刷新令牌(Refresh Token)降低风险。
- 单点退出挑战:
- JWT 无状态,需黑名单或短效期实现退出。
4. 适用场景
- 微服务架构:
- 各服务验证同一 JWT,共享用户身份。
- 企业系统:
- 如 OA、HR、CRM 系统间无缝切换。
- 第三方集成:
- 跨组织应用(如 Google 登录多个服务)。
- 前后端分离:
- 前端携带 JWT 访问 API。
5. 优缺点
优点
- 用户体验好:一次登录,多系统通用。
- 无状态:服务端无需存储会话,扩展性强。
- 跨域友好:支持分布式和移动端。
缺点
- 退出复杂:JWT 无状态,需黑名单或短效期。
- 安全性依赖密钥:密钥泄露风险大。
- Payload 膨胀:JWT 携带信息多,增大请求头。
6. 延伸与面试角度
- 与 OAuth:
- JWT SSO 关注内部系统,OAuth 关注授权。
- 与 Session:
- Session 存服务端,JWT 存客户端。
- 实际应用:
- 电商:用户登录后访问订单、支付。
- 日志:统一认证分析系统。
- 安全优化:
- HTTPS 加密传输。
- 刷新令牌延长会话。
- 面试点:
- 问“原理”时,提流程和签名。
- 问“退出”时,提黑名单。
总结
JWT 单点登录通过 SSO 服务器生成 JWT,用户凭令牌访问各子系统,实现一次登录多系统通用。基于无状态和跨域特性,适合分布式场景。面试时,可提流程图或安全措施,展示理解深度。