身份认证令牌 📅 发布时间:2026/7/5 11:40:38 👁️ 浏览次数: 是什么?为什么需要令牌令牌的出现令牌三步走常见令牌JWT(JSON Web Token)jwt demoOAuth2.0(不透明令牌)是什么?身份令牌是现代Web应用和移动应用中用于管理用户会话的核心机制为什么需要令牌没有令牌的世界——Cookie/Session基于服务器存储的会话 的传统模式你输入用户名密码登录。服务器验证通过在服务器的内存里创建一个Session会话记录并生成一个对应的 Session ID会话ID。服务器把 Session ID 发给浏览器浏览器存在 Cookie 里。以后每次请求浏览器带上这个 ID。关键点服务器收到 ID 后必须去自己的内存或数据库里查找这个 Session 是否存在、是否过期令牌的出现无状态Stateless。服务器不再存储 Session而是把用户信息如用户ID、昵称、过期时间经过加密直接生成一个令牌交给客户端。 客户端每次带着这个令牌来服务器只需要验证令牌本身的签名就能确认身份无需查数据库或内存令牌三步走常见令牌JWT(JSON Web Token)eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cJWT 由三部分组成Header头部、Payload负载和Signature签名头部Header声明了加密算法比如用了什么哈希算法。载荷Payload存放实际数据的地方。比如用户IDuser_id: 123、用户名、过期时间exp。注意这里的数据只是用Base64编码可解码看到原文所以千万不要在JWT里存放密码等敏感信息。签名Signature这是最关键的防伪部分。服务器使用只有自己知道的密钥对前两部分进行加密生成签名。如果有人篡改了令牌里的用户ID签名就无法匹配服务器会直接拒绝。jwt demodependencies 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 dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-jackson/artifactId !-- 或 jjwt-gson用于 JSON 处理 -- version0.11.5/version scoperuntime/scope /dependency /dependenciespackage com.jysemel; import io.jsonwebtoken.*; import io.jsonwebtoken.security.Keys; import javax.crypto.SecretKey; import java.util.Date; import java.util.HashMap; import java.util.Map; public class JwtExample { // 生成一个足够安全的签名密钥实际应用中应从配置文件读取或使用密钥库 private static final SecretKey SECRET_KEY Keys.secretKeyFor(SignatureAlgorithm.HS256); // HS256 需要 256位密钥 // 过期时间1小时毫秒 private static final long EXPIRATION_TIME 3600000; public static void main(String[] args) { // 1. 生成 JWT String token generateToken(user123, admin); System.out.println(生成的 JWT\n token); // 2. 验证并解析 JWT parseToken(token); } /** * 生成 JWT * param subject 用户标识如用户名、用户ID * param role 用户角色自定义声明示例 * return JWT 字符串 */ public static String generateToken(String subject, String role) { // 设置头部可选默认即可 MapString, Object header new HashMap(); header.put(typ, JWT); // 设置载荷Claims JwtBuilder builder Jwts.builder() .setHeader(header) // 头部 .setSubject(subject) // 主题通常是用户标识 .setIssuedAt(new Date()) // 签发时间 .setExpiration(new Date(System.currentTimeMillis() EXPIRATION_TIME)) // 过期时间 .setIssuer(MyApp) // 签发者 .setAudience(MyClient) // 接收方 .setId(java.util.UUID.randomUUID().toString()) // JWT ID用于防止重放攻击 .claim(role, role) // 自定义声明角色 .claim(dept, engineering) // 自定义声明部门 .signWith(SECRET_KEY); // 签名 return builder.compact(); } /** * 解析 JWT验证签名并提取数据 * param token JWT 字符串 */ public static void parseToken(String token) { try { // 创建解析器设置签名密钥 JwtParser parser Jwts.parserBuilder() .setSigningKey(SECRET_KEY) .build(); // 解析 JWT得到 JwsClaims 对象 JwsClaims jws parser.parseClaimsJws(token); // 获取头部 JwsHeader header jws.getHeader(); System.out.println(\n--- 解析结果 ---); System.out.println(算法 header.getAlgorithm()); System.out.println(类型 header.getType()); // 获取载荷 Claims claims jws.getBody(); System.out.println(主题subject claims.getSubject()); System.out.println(签发时间 claims.getIssuedAt()); System.out.println(过期时间 claims.getExpiration()); System.out.println(签发者 claims.getIssuer()); System.out.println(接收方 claims.getAudience()); System.out.println(JWT ID claims.getId()); System.out.println(角色自定义声明 claims.get(role)); System.out.println(部门自定义声明 claims.get(dept)); } catch (ExpiredJwtException e) { System.err.println(JWT 已过期 e.getMessage()); } catch (UnsupportedJwtException e) { System.err.println(不支持的 JWT e.getMessage()); } catch (MalformedJwtException e) { System.err.println(JWT 格式错误 e.getMessage()); } catch (SignatureException e) { System.err.println(JWT 签名验证失败 e.getMessage()); } catch (IllegalArgumentException e) { System.err.println(JWT 参数非法 e.getMessage()); } } }OAuth2.0(不透明令牌)OAuth2.0 是一个开放授权标准它允许用户授权第三方应用访问其资源而无需将用户名和密码提供给第三方应用。OAuth 2.0 授权码模式流程图时序图OAuth 2.0 核心角色关系图
CMOS门电路实战:从基础与非门到高阻态三态门的工程化设计 1. 从“开关”到“智能”:CMOS门电路的设计哲学 大家好,我是老张,一个在芯片和硬件设计里摸爬滚打了十多年的工程师。今天我们不聊那些高深的理论,就聊聊怎么把CMOS门电路这个最基础的东西,从书本上的符号,… 2026/7/5 22:23:43
用Pico手势交互开发3D菜单?Unity XR Interaction Toolkit实现按压式UI全流程 用Pico手势交互开发3D菜单?Unity XR Interaction Toolkit实现按压式UI全流程 在VR应用设计中,菜单系统往往是用户体验的枢纽。传统的射线点击或手柄按键选择,虽然功能完备,却总隔着一层“玻璃”——用户无法真正“触摸”到界面。当… 2026/5/17 12:11:47
MATLAB算法工具箱:5种常用建模方法代码详解(附避坑指南) MATLAB算法工具箱:5种常用建模方法代码详解(附避坑指南) 如果你正在为数学建模项目寻找一个趁手的工具,或者厌倦了在Python和R之间反复切换,那么MATLAB很可能就是你一直在找的那个“瑞士军刀”。它不仅仅是学术界和工业… 2026/5/17 12:11:46
Hugging Face与Flair默认情感分析管道深度对比 1. 项目概述:为什么“开箱即用”的情感分析模型值得较真?你是不是也经历过这样的场景:项目时间紧,老板说“先跑个情感分析看看用户评论倾向”,你火速打开 Hugging Face 的pipeline,一行代码搞定;… 2026/7/5 22:24:52
移动端实时AI换脸部署实战:模型量化与跨平台优化 1. 项目概述:当实时AI换脸遇上移动端最近在折腾一个挺有意思的项目,叫Deep-Live-Cam。简单说,它是个开源的实时人脸替换工具,你给它一张目标人脸图片,它就能用你的摄像头实时把画面里的人脸换成目标脸,效果… 2026/7/5 22:22:51
KOLLMORGEN CP310250伺服驱动器技术解析与应用指南 1. 产品定位与核心特性解析 KOLLMORGEN CP310250伺服驱动器是工业自动化领域的一款高端驱动解决方案,专为对动态响应和精度要求严苛的应用场景设计。这款额定功率3kW的驱动器采用了模块化架构,支持多种反馈接口(包括EnDat 2.2、BiSS-C、Resol… 2026/7/5 22:22:51
蒙特卡洛方法在SIR模型中的3个关键应用:从参数估计到干预策略评估 蒙特卡洛方法在SIR模型中的3个关键应用:从参数估计到干预策略评估引言:当概率遇上流行病学想象你是一位公共卫生决策者,面对一种新型传染病的爆发,需要回答三个关键问题:病毒传播速度有多不确定?如果实施社… 2026/7/5 22:20:51
Three.js 中国旗帜教程 中国旗帜 China Flag ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 RawShaderMaterial 手写… 2026/7/5 22:18:51
App渠道追踪实战指南:iOS、Android与鸿蒙多平台实现与避坑 1. 项目概述:为什么渠道追踪是App增长的“生命线”在移动互联网的下半场,流量红利见顶,每一分市场预算都变得弥足珍贵。作为开发者或市场运营,你是否曾面临这样的灵魂拷问:我们投放在抖音、小红书、知乎、应用商店的广… 2026/7/5 22:18:51
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36