1. 令牌服务概述

咱们先聊聊什么是令牌服务。说白了,令牌就是一把“临时钥匙”。你拿着它,系统就知道你是谁、能干什么。我在早期做登录模块时,总是用 session 一把梭,后来发现跨服务、跨端根本调不通。嗯,从那时起我才认真研究令牌。

1.1 令牌服务的定义

令牌服务( Service)负责生成、分发、校验和吊销令牌。令牌本身是一段结构化数据,通常包含用户身份、权限范围、有效期等关键信息。服务端只要验证令牌合法,就不再反复查数据库确认身份。

核心公式:令牌 = 身份 + 权限 + 时效 + 签名

我个人习惯把令牌服务比作“酒店前台”。你 check-in 时拿到房卡,前台只检查房卡是否在有效期内、能不能开这扇门。至于你是张三还是李四,房卡上写得很清楚,前台不会再打电话去总部核实。

1.2 令牌服务的作用

令牌服务不是花架子,它解决了几个关键痛点:

  • 无状态认证:服务端不用存 session,水平扩展时零迁移成本
  • 跨域/跨端共享:令牌可以放在 HTTP Header、Cookie 甚至二维码里,手机、网页、小程序都能用
  • 细粒度权限控制:令牌里可以携带 roles、scopes,网关直接拦截,不用每次都落到业务层
  • 防篡改:通过 JWT 签名或 OAuth 2.0 的 access 结构,客户端改了也没用

我曾经在项目中见过一个团队把整个用户表缓存到 Redis 里做鉴权,每次请求都要查一次。后来改令牌服务,响应时间从 12ms 降到 2ms。你想想看,这个差距在高并发下有多恐怖。

对比维度 传统 Session 令牌服务
存储位置 服务端内存/Redis 客户端持有
扩展性 需要 session 同步 天然支持水平扩展
跨域名 困难(Cookie 限制) 轻松(Authorization header)
吊销 直接删除 session 需要黑名单或短有效期

避坑指南:我曾经直接把 JWT 有效期设成 7 天,结果一个离职员工拿旧令牌还能访问两天。后来我强制 refresh 机制 + 令牌黑名单,才把风险兜住。

1.3 常见场景

令牌服务不是银弹,但下面几个场景特别适合落地:

  1. 单点登录(SSO):一个令牌打通企业所有内部系统。我在做内部 OA 时,直接用 OAuth 2.0 + JWT,三个系统共用一套鉴权。
  2. 移动端 API 鉴权:App 启动时申请 access ,后续请求携带令牌。避免重复登录。
  3. 微服务网关鉴权:网关统一校验令牌,提取用户信息并注入请求头,下游服务只管业务。
  4. 第三方开放平台:例如微信支付的回调通知,通过 验证调用方身份。
  5. IoT 设备认证:设备携带预置令牌(或通过 mTLS 获取临时令牌)连接云端。

为什么这些场景天然适合令牌?因为它们都涉及“信任边界变化”——要么跨服务、要么跨端、要么跨组织。令牌就像是一张一次性签证,网关或受信方检查签证齐整就直接放行。

1.4 知识体系框架

下面这张图概括了令牌服务的核心脉络,我们整个课程会围绕它展开:

令牌服务知识体系 令牌服务 定义:临时凭证 作用:无状态+跨域+防篡改 常见场景:5类 JWT / OAuth 2.0 令牌生命周期管理 后续章节会依次深入:令牌格式设计、签发流程、 网关校验、权限模型绑定、吊销策略、性能优化等

一点建议:刚开始落地令牌服务时,不要一开始就搞自定义协议。先把 JWT 用熟,再根据业务折腾。我见过太多人上来就撸一个 格式,结果签名算法、过期逻辑、刷新机制全要重写,踩坑踩得怀疑人生。

1.5 从权限模型看令牌

我们的课程叫“权限模型在令牌服务中的落地实践”,所以需要提前交代:令牌只是载体,权限模型才是灵魂。常见的权限模型有 RBAC、ABAC、ReBAC 等,它们会映射到令牌的 claims 字段中。比如 RBAC 模型中,令牌里会携带角色列表;ABAC 模型中,令牌可能携带用户属性标签。

我记得有一次面试聊到一个创业团队,他们把用户的全部权限列表塞进 JWT,结果 体积飙到 4KB,超过千级个用户时每次请求头都大得吓人。优化方案是把权限模型抽离,令牌只存角色 ID,业务端通过缓存回查。这就是“令牌轻量化”原则,我们在后面章节会详细讲。

好了,这一章把令牌服务的基本概念、作用和场景讲清楚了。下一块内容会直接切入令牌的生命周期——从签发到吊销,每个环节都有设计取舍。咱们慢慢来。