核心概念
JWT Token 与各种令牌
了解什么是 JWT,以及 ID Token、Access Token 和 Refresh Token 之间的区别。
JWT Token 与各种令牌
在现代身份认证体系(尤其是基于 OIDC 和 OAuth 2.0 的体系)中,Token(令牌) 是传递身份和授权信息的核心载体。YeeAuth 使用业界标准的 JWT 格式来签发 Token。
什么是 JWT Token?
JWT (JSON Web Token) 是一种开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。 这些信息可以被验证和信任,因为它们是经过数字签名的。JWT 通常使用 HMAC 算法或 RSA/ECDSA 的公钥/私钥对进行签名。
一个典型的 JWT 由三部分组成,通过点号 (.) 分隔:
- Header(头部):包含 Token 的类型(JWT)和所使用的签名算法(如 RS256)。
- Payload(负载):包含声明(Claims),即关于实体(通常是用户)和其他数据的陈述。例如用户的 ID、过期时间等。
- Signature(签名):用于验证消息在传递过程中没有被更改。
Token 的三大护法
在 YeeAuth 的认证授权流程中,您通常会接触到以下三种核心 Token:
ID Token
- 用途:用于证明“你是谁”。它主要被前端应用或客户端消费。
- 内容:包含了用户的身份信息声明(如
sub用户 ID、name姓名、email邮箱等)。 - 生命周期:通常较短,因为它仅仅是用户成功认证那一刻的“证明信”。
- 注意:永远不要使用 ID Token 来调用您的后端 API。
Access Token
- 用途:用于证明“你能做什么”。它是调用受保护的 API 资源时出示的“通行证”。
- 内容:包含了授权信息,例如允许操作的权限范围(
scopes)、受众(aud即允许使用该 Token 的 API 标识)等。它可能不包含任何用户的具体姓名或邮箱,因为 API 只关心“你有没有权限访问”。 - 生命周期:较短(通常为几分钟到几小时),以降低泄露带来的风险。
Refresh Token
- 用途:用于在 Access Token 过期时,无需用户重新登录即可静默获取新的 Access Token 和 ID Token。
- 特点:它通常是一个不透明的字符串(Opaque Token),并不一定是 JWT 格式。
- 安全性:由于 Refresh Token 的生命周期很长(甚至可以是无限期直到被主动撤销),它具有极高的敏感性。通常只签发给能安全存储机密的客户端(如拥有后端的 Web 应用),并建议开启“刷新令牌轮转(Rotation)”以增强安全性。
Access Token vs ID Token
| 特性 | ID Token | Access Token |
|---|---|---|
| 受众 (Audience) | 客户端应用程序本身 (Client) | 资源服务器 (API Server) |
| 主要目的 | 在客户端验证用户身份并展示用户信息 | 授权客户端访问后端 API 资源 |
| 是否包含权限范围 | 不包含 (只关心身份) | 包含 (Scopes,定义了可以做的操作) |
| 是否可被 API 验证 | 否 | 是 |