深入了解java-jwt生成与校验
程序员文章站
2022-06-02 10:32:42
什么是 jwt
这里是jwt 官方地址,想了解更多的可以在查看。
jwt 全称是json web token,从全称就可以看出 jwt 多用于认证方面的。这个东西定...
什么是 jwt
这里是jwt 官方地址,想了解更多的可以在查看。
jwt 全称是json web token,从全称就可以看出 jwt 多用于认证方面的。这个东西定义了一种简洁的,自包含的,安全的方法用于通信双方以 json 对象的形式传递信息。其中简洁,安全,传递信息和 web 系统非常契合。
jwt 实际上就是一个字符串,由以下三个部分构成(通过.分隔):
- header 头部
- payload 负载
- signature 签名
因此一个 jwt 字符串都是如下的形式:
header.payload.signature
header
header 大多数情况下是只包含两个属性的 json 字符串,token 的类型(“jwt”)和用到的算法(比如 hs256,rs256,es256 等)如下:
{ "alg": "hs256", "typ": "jwt" }
然后用 base64 将其编码就等到了 jwt 的第一部分
payload
payload 顾名思义用于携带数据的,这里的数据有三种类型:
- registered claims:一组预定义的声明,写在 jwt 标准中,所有对其的实现都要准守。但不是强制要求携带。有以下几个字段:iss(签发者),iat(创建时间),exp(过期时间),aud(签发者),sub(面向的用户)
- public claims:随意定义,通常存放用户 id,用户类别等非铭感信息
这些数据也是 json 的形式,用 base64 编码后就得到了 jwt 的第二个部分。
signature
签名就是通过设定的秘钥和签名算法来对 header 和 payload 进行签名得到一个签名字符串,将这三个字符串组合起来就是 jwt 了。
java 中使用
通过java-jwt来实现,首先引入依赖:
<dependency> <!-- 截止当前最新版本为3.7 --> <groupid>com.auth0</groupid> <artifactid>java-jwt</artifactid> <version>3.7.0</version> </dependency>
签名
使用 hmc256,代码入下:
private static final algorithm algorithm= algorithm.hmac256("security"); public static string encode() { //通过秘钥生成一个算法 string token = jwt.create() //设置签发者 .withissuer("test") //设置过期时间为一个小时 .withexpiresat(new date(system.currenttimemillis()+60*60*1000)) //设置用户信息 .withclaim("name","小明") .withclaim("age",20) .sign(algorithm); return token; }
验证
验证代码如下:
//校验类 private static final jwtverifier jwt_verifier= jwt.require(algorithm).withissuer("test").build(); public static void decode(string token) { decodedjwt decodedjwt = jwt_verifier.verify(token); //如果校验失败会抛出异常 //payload可从decodejwt中获取 }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。