JWT在Java中的使用详解

JWT在Java中的使用详解


前言

由于Http协议是无状态的,早期的前后端交互依赖的是Cookie+Session。服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。但是如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。


一、JWT是什么?

JWT的英文全称为Json Web Token,中文翻译为令牌。JSON Web 令牌 (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为 JSON 对象。此信息可以进行验证和信任,因为它是经过数字签名的。(来自官网的翻译)

二、JWT令牌结构

JWT由3部分组成:头部(Header)、有效载荷(Payload)和验证签名(Signature)。
最后通过base64算法生成一串字符串。

1. Header 头部

JWT头是一个描述JWT元数据的JSON对象。
alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256)。
typ属性表示令牌的类型,JWT令牌统一写为JWT。

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

2. Payload 载荷

有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。
载荷内部可以分为:

  1. 公共声明(默认提供七个字段供选择)
  2. 私有声明(开发者自定义的声明放在此处)
公共声明名称 公共声明描述
iss 发行者
sub 主题
aud 用户
exp 过期时间
nbf 在这个时间之前不可用
iat 发布时间
jti JWT的ID

3. Verify Signature 验证签名

签名哈希部分是对上面两部分数据签名,需要使用base64编码后的header和payload数据,通过指定的算法生成哈希,以确保数据不会被篡改。首先,需要指定一个密钥(secret)。该密码仅仅为保存在服务器中,并且不能向用户公开。然后,使用header中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名

三、代码部分

由于官网提供多种JWT实现(官方网站),这里只用到(com.auth0 / java-jwt)这个版本的jwt。

1.maven依赖

<dependency>
   <groupId>com.auth0</groupId>
   <artifactId>java-jwt</artifactId>
   <version>3.19.2</version>
</dependency>

2.代码部分

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值