JWT令牌类型全解析:Bearer、JWT与Refresh

在 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 的标准认证方式。

  • 推荐用法 :

    http 复制代码
    Authorization: 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 天),但不能用于访问资源。
  • 使用流程 :
    1. 用户登录,获取 access_token 和 refresh_token。
    2. access_token 过期后,用 refresh_token 请求新 Token。
    3. 服务器验证 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"
}
相关推荐
我不会起名字3222 天前
Redis 从 0 到 1(十九):JWT 还是 Redis Session?登录态存储的 Go 实现
redis·go·jwt·session·登录态
Thanks_ks3 天前
Cookie 和 Session 到底是什么关系——登录态是怎么维持的
分布式·http·jwt·cookie·session·后端开发·登录态
枫子有风6 天前
卡码网盘项目深挖
java·redis·jwt·es·pgvector
FungLeo7 天前
成为全栈·Go 后端篇·跨语言认证兼容:Node 与 Go 如何互认 JWT 和密码
golang·go·jwt·身份认证·成为全栈·bcrypt
积流成海16 天前
JWT 解析:三段结构、过期时间换算与常见误区
jwt·盘子工具站
FungLeo23 天前
成为全栈·Flutter App 篇·Refresh Token 旋转与并发 401:安全存储与会话代次
flutter·jwt·移动安全·身份认证·token刷新·成为全栈
豆角焖肉23 天前
SpringBoot+JWT 实现前后端分离登录鉴权
java·开发语言·spring boot·jwt·前后端分离·登录认证
CSharp精选营1 个月前
Blazor 里 JWT 过期,用户正下单就被踢
认证·jwt·webassembly·blazor·令牌刷新
白帽攻防录1 个月前
SRC 挖洞:WSO2 JWT 算法混淆绕过深度复盘,CVE-2026-5430 不支持的算法怎么变成管理员
网络·算法·安全·网络安全·jwt
EatFan1 个月前
Go语言全栈实战:基于 Gin + Vue + JWT + RBAC 从零搭建前后端分离权限管理系统
vue.js·golang·go·vue·gin·jwt·rbac