目录一. Token 的英文本义 和 常见令牌二. 认证令牌的由来token 出现前token 出现后三. 基本概念四. Token 的核心作用五. Java 中常见的 Token 场景1. JWTJSON Web Token2. OAuth2.0 令牌3.自定义令牌六. 优势总结题外话认证的技术栈(持续更新中)什么是 Token令牌数字签名signaturejwt 的基本原理介绍自定义一个jwt 工具类并用接口测试Springboot jwt 实现带权限的认证不使用spring security一. Token 的英文本义 和 常见令牌Token英文本义为“券、信物”在计算机领域我们翻译成“令牌”。其实就是“信物”的意思。我们看影视剧中主角手握令牌就可以过城门、进皇宫、领取装备等等。我们在计算机领域中谁有了有效的 token谁 就有了临时获取数据的身份所以token翻译成“令牌”更加的生动。token 在计算机领域核心 就是 “available”我们常见的令牌如下认证令牌Authentication Token认证令牌是用于验证用户身份的一种机制。当用户登录系统后服务器端会生成一个唯一的认证令牌并将其发给用户。用户在随后的请求中附带这个令牌以此来证明自己的身份。这种机制常用于网络应用帮助维持用户会话或实现无状态的身份验证。网络令牌Network Token在网络协议中令牌可以指代控制访问或数据传输的权利。例如在令牌环网络中令牌是一个特殊的数据包只有持有令牌的计算机才能发送数据从而避免数据碰撞。数字货币和区块链中的Token在区块链和数字货币领域Token通常指代在特定区块链上发行的数字资产或代币。这些Token可以代表各种资产如货币、股份、资产等且可以在区块链上自由交易。不同类型的Token在不同的领域和应用场景中扮演着重要角色但核心都是表示一种可以临时获取数据的身份或资格。我们这里着重的就是讲述的是“认证令牌”。二. 认证令牌的由来token 出现前我们以前设计 登录系统过程是1、客户端通过 用户名和密码登录服务器。2、服务端收到请求去验证用户名与密码。验证成功在当前对话session里面保存相关数据比如用户角色、登录时间等等。3、服务器向用户返回一个 session_id写入客户端的 Cookie。4、客户端随后的每一次请求都会通过 Cookie将 session_id 传回服务器。5、服务器收到 session_id获取相应的session, 来判断是否通过客户端的请求。这种验证方式有很多问题比如现代系统都是分布式系统session 无法跨系统共享。token 出现后1、客户端使用用户名跟密码请求登录2、服务端收到请求去验证用户名与密码验证成功服务端会签发一个Token然后再把这个 Token 发送给客户端3、客户端收到 Token 以后可以把它存储起来比如放在 Cookie 里或者 Local Storage 里4、客户端每次向服务端请求资源的时候需要带着服务端签发的 Token5、服务端收到请求验证密客户端请求里面带着的 Token 如果验证成功就继续执行客户端请求的业务逻辑否则就是验证失败报错返回给客户端三. 基本概念在 Java 开发中Token令牌通常指一串经过加密或编码的字符串作为客户端与服务器之间进行身份验证、信息传递或权限校验的 “凭证”。它本质上是一种轻量级的身份标识用于替代传统的 Session 机制尤其在分布式系统、前后端分离架构或跨域场景中广泛使用。四. Token 的核心作用身份验证用户登录成功后服务器生成一个 Token 并返回给客户端客户端后续请求时携带该 Token服务器通过验证 Token 有效性来确认用户身份无需重复登录。信息传递Token 可包含少量非敏感用户信息如用户 ID、角色减少服务器查询数据库的次数。权限校验Token 中可嵌入权限信息服务器通过解析 Token 直接判断用户是否有权限访问某个接口。无状态性服务器无需存储 Token 相关数据对比 Session 需要服务器保存会话状态更适合分布式系统如微服务架构。五. Java 中常见的 Token 场景1. JWTJSON Web Token最常用的 Token 格式之一由三部分组成头部 Header 载荷 Payload 签名 Signature采用 JSON 格式存储信息可自包含、可验证。例如eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkiLCJuYW1lIjoiSm9obiBEb2UifQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c2. OAuth2.0 令牌在第三方授权场景中如微信登录、GitHub 授权服务器会颁发 Access Token 或 Refresh Token用于访问第三方资源。3.自定义令牌开发者可自行设计 Token 格式如 UUID 加盐加密但安全性和通用性通常不如 JWT。Java 中处理 Token 的常见方式以 JWT 为例Java 中常用库如 jjwt、java-jwt可快速实现 Token 的生成与验证/* 引入依赖Maven dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-api/artifactId version0.11.5/version /dependency !-- 实现模块必须包含否则无具体逻辑 -- dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-impl/artifactId version0.11.5/version scoperuntime/scope /dependency !-- 可选JSON 处理模块若用默认序列化需添加 -- dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-jackson/artifactId version0.11.5/version scoperuntime/scope /dependency */importio.jsonwebtoken.Jwts;importio.jsonwebtoken.SignatureAlgorithm;importio.jsonwebtoken.security.Keys;importjava.security.Key;importjava.util.Date;publicclassJwtExample{// 生成签名密钥实际开发中需妥善保管避免泄露privatestaticfinalKeySECRET_KEYKeys.secretKeyFor(SignatureAlgorithm.HS256);// Token 过期时间1小时privatestaticfinallongEXPIRATION_TIME3600000;// 生成 TokenpublicstaticStringgenerateToken(StringuserId,Stringusername){returnJwts.builder().setSubject(userId)// 主题通常为用户ID.claim(username,username)// 自定义信息.setExpiration(newDate(System.currentTimeMillis()EXPIRATION_TIME))// 过期时间.signWith(SECRET_KEY)// 签名.compact();}// 验证并解析 TokenpublicstaticvoidvalidateToken(Stringtoken){try{Jwts.parserBuilder().setSigningKey(SECRET_KEY).build().parseClaimsJws(token);// 验证签名和过期时间System.out.println(Token 有效);}catch(Exceptione){System.out.println(Token 无效e.getMessage());}}publicstaticvoidmain(String[]args){StringtokengenerateToken(123,张三);System.out.println(生成的 Tokentoken);validateToken(token);// 验证 Token}}六. 优势总结无状态服务器无需存储会话信息减轻分布式系统的同步压力。跨域支持适合前后端分离如 Vue/React 前端 Java 后端或跨服务调用。扩展性可灵活嵌入用户信息减少数据库查询。在 Java 开发中Token 是实现身份认证和权限控制的核心手段尤其在 Spring Security、微服务架构中应用广泛。题外话既然有了令牌就有了权限、身份。它的作用这么大那肯定需要防伪所以令牌 需要 签名 来防伪或者说认证。签名的内容点击“这里”