【无标题】

初识JWT

JWT(JSON Web Token)是一种基于 JSON 的开放标准(RFC 7519),用于在网络应用间安全传递声明(claims)。它通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),中间用点(.)分隔,形如 header.payload.signature。

JWT的结构

1)头部(Header)
包含两部分:令牌类型(通常是 JWT)和使用的签名算法(如 HMAC SHA256 或 RSA)。
示例:

{
  "alg": "HS256",
  "typ": "JWT"
}

2)载荷(Payload)
包含声明(claims),即关于实体(通常是用户)和其他数据的声明。声明分为三种:
注册声明(如iss、sub、aud、exp等,非强制但推荐使用)。
公开声明(自定义的键值对,需避免冲突)。
私有声明(在同意使用的各方之间定义的声明)。
示例:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

3)签名(Signature)
为了创建签名部分,需要使用编码后的头部、编码后的载荷、一个秘钥(secret)和头部中指定的签名算法。
示例(使用 HMAC SHA256 算法):

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

JWT的工作流程

用户认证:用户登录时,服务器验证用户身份后创建 JWT。
返回令牌:服务器将 JWT 返回给客户端(通常通过 HTTP 响应头或 JSON 数据)。
客户端存储:客户端(如浏览器)将 JWT 存储在本地(如 localStorage 或 cookie)。
后续请求:客户端在每次请求时将 JWT 包含在请求头中(如Authorization: Bearer )。
服务器验证:服务器验证 JWT 的签名和有效性,确认用户身份后处理请求。

JWT的应用场景

身份验证:用户登录后颁发 JWT,后续请求通过 JWT 验证身份,无需依赖 session/cookie。
信息交换:JWT 可安全地在各方之间传递信息,因为签名确保数据未被篡改。
单点登录(SSO):多个服务可共享 JWT,实现跨域身份验证。
API 授权:保护 API 接口,只有携带有效 JWT 的请求才能访问受保护资源。

JWT的优缺点

优点
无状态:不依赖服务器存储 session,适合微服务和分布式系统。
跨域支持:可通过各种客户端存储(如 localStorage)在不同域名间传递。
可扩展:载荷部分可自定义声明,灵活携带用户信息。
安全性:签名机制确保数据完整性,使用 HTTPS 可进一步防止令牌拦截。
缺点
令牌体积大:Base64 编码后的 JWT 可能较长,增加请求头大小。
无法主动失效:一旦颁发,除非过期或被列入黑名单,否则一直有效。
敏感信息暴露:载荷部分仅被编码(而非加密),不要存放敏感数据。
性能开销:每次请求都需验证签名,对性能有一定影响。

注意事项

1.不要在载荷中存放敏感信息(如密码),因为载荷只是 Base64 编码,可被轻易解码。
2.妥善保管秘钥:签名秘钥泄露会导致令牌被伪造。
3.处理并发问题:同一用户可能在不同设备登录,需考虑令牌的唯一性和并发控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值