在 JWT(JSON Web Token)体系中,token_type 字段是一个可选但常见的字段,用于明确 Token 的类型和用途。它通常出现在响应头或 Token 的负载(payload)中。
✅ 常见的 token_type 及其作用
| Token Type | 作用说明 | 典型使用场景 |
|---|---|---|
bearer |
最常见类型,表示"携带者"令牌(Bearer Token),即持有者即可访问资源。 | 所有基于 OAuth2 / JWT 的 API 认证。例如:Authorization: Bearer eyJhbGciOiJSUzI1Ni... |
mac |
用于 HMAC(基于密钥的哈希消息认证码)签名的 Token,通常用于 OAuth 1.0a。 | OAuth 1.0a 协议(现已较少使用)。 |
jwt |
明确表示这是一个 JWT 格式的 Token(虽然 bearer 也能是 JWT,但 jwt 更明确)。 |
用于区分 JWT 和非 JWT 的 Bearer Token(如某些自定义 Token)。 |
refresh |
专门用于刷新访问 Token 的 Token。它本身不能访问资源,只能换取新的 access_token。 |
实现"长期登录"或"自动续期"功能(如 Refresh Token 机制)。 |
🔍 详细说明与最佳实践
1. bearer ------ 最常用,推荐使用
-
含义:持有者可以使用该 Token 访问资源。
-
标准支持:HTTP Bearer Token 是 OAuth 2.0 的标准认证方式。
-
推荐用法 :
httpAuthorization: Bearer eyJhbGciOiJSUzI1Ni...
✅ 绝大多数现代系统(包括 FastAPI + JWT)都使用
bearer。
2. jwt ------ 标识 Token 格式
-
作用:明确该 Token 是一个标准的 JWT(JSON Web Token)。
-
使用场景 :当你在多个 Token 类型共存的系统中(如同时支持 JWT 和自定义 Token),可以使用
jwt来区分。 -
示例 :
json{ "access_token": "eyJhbGciOiJSUzI1Ni...", "token_type": "jwt", "expires_in": 1800 }
✅ 建议在返回 Token 的响应中包含
token_type: jwt,以增强清晰度。
3. refresh ------ 用于刷新访问 Token
- 作用 :用于获取新的
access_token,防止用户频繁登录。 - 生命周期 :通常比
access_token长(如 7 天、30 天),但不能用于访问资源。 - 使用流程 :
- 用户登录,获取
access_token和refresh_token。 access_token过期后,用refresh_token请求新 Token。- 服务器验证
refresh_token是否有效,若有效则返回新的access_token。
- 用户登录,获取
✅ 强烈建议在支持"长期登录"的系统中使用
refresh_token。
📌 总结:如何选择 token_type
| 场景 | 推荐 token_type |
|---|---|
| 一般 API 认证(FastAPI + JWT) | bearer(或 bearer + jwt) |
| 明确 Token 是 JWT 格式 | jwt |
| 支持"记住我"或自动续期 | refresh |
| 使用 OAuth 1.0a(不推荐) | mac |
✅ 最佳实践建议(FastAPI 项目)
json
{
"access_token": "eyJhbGciOiJSUzI1Ni...",
"token_type": "bearer",
"expires_in": 1800,
"refresh_token": "refresh.eyJhbGciOiJSUzI1Ni...",
"refresh_token_type": "refresh"
}