大白话解释认证JWT是什么 有什么用 怎么用

JWT是什么?

JWT(JSON Web Token)就像一张"加密的电子通行证",用来证明你是谁、能干什么。它由三段字符串拼接而成(比如xxx.yyy.zzz),每段对应不同的信息:

头(Header):说明加密算法类型,比如"用HS256算法签名" 。
身体(Payload):存用户身份信息(如用户ID、角色)、有效期等,类似快递单上的收件人和地址。
签名(Signature):用密钥对前两段内容加密生成的"防伪码",防止信息被篡改。

你去游乐园玩,入口处发给你一张门票(JWT),上面写着"张三,VIP,有效期1天",并盖了章(签名)。之后进每个项目,工作人员扫一下票就能确认你的身份,不用每次都查身份证(数据库)。

JWT有什么用?

  1. 身份验证(登录)
    场景:用户登录后,服务器生成JWT返回给客户端(比如浏览器或APP),后续请求带着JWT就能直接访问资源,无需反复输入账号密码 。
    优势:比传统的Session更轻量,服务器不用存用户状态,适合分布式系统(如微服务)。
  2. 权限控制(你能干啥)
    场景:JWT里可以存用户角色(如普通用户、管理员),服务器根据角色决定能否访问某个功能(比如删除数据)。
  3. 跨系统通信(单点登录)
    场景:用同一个JWT登录多个关联系统(比如阿里旗下淘宝、支付宝),避免反复登录。
  4. 信息交换(安全传数据)
    场景:A系统生成JWT,B系统验证签名后直接读取数据,无需双方共享数据库 。

JWT怎么用?三步走:生成→传递→验证

  1. 生成JWT
    依赖:Java项目引入jjwt库(其他语言类似)。
    代码示例(Java):
java 复制代码
String jwt = Jwts.builder()  
    .setSubject("用户ID")              // 用户唯一标识  
    .claim("role", "admin")           // 自定义权限  
    .setExpiration(有效期)            // 设置过期时间  
    .signWith(密钥, 加密算法)          // 生成签名  
    .compact();  

注意:密钥必须保密,别写在代码里!

  1. 传递JWT
    方式:通常放在HTTP请求头的Authorization字段里:
java 复制代码
Authorization: Bearer xxx.yyy.zzz  

安全建议:用HTTPS传输,防止被截获。

  1. 验证JWT
    服务器代码(Java):
java 复制代码
Jws<Claims> claims = Jwts.parserBuilder()  
    .setSigningKey(密钥)  
    .build()  
    .parseClaimsJws(jwt);  
String userId = claims.getBody().getSubject(); // 提取用户ID  

若签名无效或已过期,直接拒绝请求。

注意事项

1.别存敏感信息:JWT的Payload是Base64编码,可以被解码,别放密码、手机号 。

2.控制有效期:设置合理过期时间(如1小时),减少被盗用风险。

3.密钥保管好:密钥泄露等于所有JWT失效,建议用环境变量或密钥管理服务。

4.无法中途废止:JWT一旦签发,在过期前无法强制失效,重要操作可结合二次验证。

总结

JWT是"无状态通行证",解决登录、权限、跨系统通信问题。
核心优势:轻量、跨平台、适合分布式系统。
适用场景:APP、网站、微服务、单点登录等。

相关推荐
清风徐来QCQ2 天前
传统Session和JWT方案的区别
jwt·session
曲幽4 天前
FastAPI + SQLite:从基础CRUD到安全并发的实战指南
python·sqlite·fastapi·web·jwt·form·sqlalchemy·oauth2
利刃大大10 天前
【SpringBoot】validation参数校验 && JWT鉴权实现 && 加密/加盐
java·spring boot·jwt·加密
二进制_博客10 天前
JWT权限认证快速入门
java·开发语言·jwt
heartbeat..12 天前
Web 状态管理核心技术详解 + JWT 双 Token (Access/Refresh Token) 自动登录
java·网络·jwt·token
musk121217 天前
jdk21 + springboot 3.2.X + security + jwt
security·jwt
源代码•宸17 天前
goframe框架签到系统项目开发(用户认证、基于 JWT 实现认证、携带access token获取用户信息)
服务器·开发语言·网络·分布式·后端·golang·jwt
哆啦code梦19 天前
JWT令牌类型全解析:Bearer、JWT与Refresh
jwt·oauth2.0·登录认证
闲人编程1 个月前
JWT认证与OAuth2集成
python·认证·jwt·签名·头部·负载·codecapsule
im_AMBER1 个月前
weather-app开发手记 02 JSON基础 | API 调用 400 错误修复 | JWT 认证问题
笔记·学习·json·axios·jwt