JWT——jjwt使用

编程入门 行业动态 更新时间:2024-10-27 11:28:03

<a href=https://www.elefans.com/category/jswz/34/1771378.html style=JWT——jjwt使用"/>

JWT——jjwt使用

文章目录

  • 一、JWT是什么?
  • 二、JWT构成
    • 0、header.payload.signature
    • 1、header 头部 (JSON数据,Base64加密)
    • 2、payload 载荷 (JSON数据,Base64加密)
      • 2.1、Public claims(公共的声明)
      • 2.2、Private claims(私人声明)
      • 2.3 注意:
    • 3、signature 签名:
  • 三、使用场景
  • 四、JAVA项目使用
    • 1、Maven依赖
    • 2、生成Token方法
    • 3、解析Token方法

一、JWT是什么?

JWT (JSON Web Token) 是一种用于身份验证和授权的安全传输数据的开放标准。

二、JWT构成

0、header.payload.signature

1、header 头部 (JSON数据,Base64加密)

报头通常由两部分组成: Token的类型(即 JWT)和所使用的签名算法(如 HMAC SHA256或 RSA)。

  • alg : HS256 : 签名使用的算法
  • typ : JWT :标识JWT

2、payload 载荷 (JSON数据,Base64加密)

载荷是实际的数据,其中包含声明。声明是关于实体(通常是用户)和其他数据的语句。
有三种类型的声明:

  • registered claims,
  • public claims
  • private claims。

下面是预定义的数据。

  • iss: jwt签发者
  • sub: jwt所面向的用户
  • aud: 接收jwt的一方
  • exp: jwt的过期时间,这个过期时间必须要大于签发时间
  • nbf: 定义在什么时间之前,该jwt都是不可用的.
  • iat: jwt的签发时间
  • jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击

2.1、Public claims(公共的声明)

使用 JWT 的人可以随意定义这些声明( 可以自己声明一些有效信息如用户的id,name等,但是不要设置一些敏感信息,如密码 )。但是为了避免冲突,应该在 JWT注册表中定义它们,或者将它们定义为包含抗冲突名称空间的 URI。

2.2、Private claims(私人声明)

这些是创建用于在同意使用它们的各方之间共享信息的习惯声明,既不是注册声明,也不是公开声明( 私人声明是提供者和消费者所共同定义的声明 )。

2.3 注意:

对于已签名的Token,这些信息虽然受到保护,不会被篡改,但任何人都可以阅读。除非加密,否则不要将机密信息放在 JWT 的有效负载或头元素中。

3、signature 签名:

签名用于验证JWT的完整性,确保在传输过程中没有被篡改。
公式:
HMACSHA256(base64UrlEncode(header) + “.” +base64UrlEncode(payload), secret)

三、使用场景

  • Web API:JWT可以作为一种安全且高效的方式来验证请求,保护Web API不被恶意请求和数据盗用。

  • 单点登录(SSO):JWT可以使用户在一次身份验证后,通过使用同一个认证令牌,来访问多个应用程序。这样可以简化用户在不同应用程序之间的登录流程,提高用户体验。

四、JAVA项目使用

1、Maven依赖

<!-- .jsonwebtoken/jjwt-api -->
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.12.3</version>
</dependency>

2、生成Token方法

//私钥,注意私钥长度至少43位,不然生成Token会报错
public static String secret ="123456789a123456789a123456789a123456789a123";
public static String createToken(){// HeaderMap<String, Object> header = new HashMap<>();header.put("alg", "HS256");header.put("typ", "JWT");// PayloadMap<String, Object> payload = new HashMap<>();payload.put("id", "malu_code");payload.put("name","码鹿");payload.put("admin",true);// 声明Token失效时间Calendar instance = Calendar.getInstance();instance.add(Calendar.SECOND,300);// 300s// 生成TokenString token = Jwts.builder().setHeader(header)// 设置Header.setClaims(payload) // 设置Payload.setExpiration(instance.getTime())// 设置生效时间.signWith(SignatureAlgorithm.HS256,secret) // 签名,这里采用私钥进行签名,不要泄露了自己的私钥信息pact(); //生成Tokenreturn  token;
}

3、解析Token方法

如果可以成功解析、不报异常,那token就是对的。

//私钥,注意私钥长度至少43位,不然生成Token会报错
public static String secret ="123456789a123456789a123456789a123456789a123";
public static boolean parserToken(String token) {JwtParser jwtParser = Jwts.parser().setSigningKey(secret).build();try {Jws<Claims> claimsJws = jwtParser.parseClaimsJws(token);// 解析head信息JwsHeader header = claimsJws.getHeader();// 解析PayloadClaims claims = claimsJws.getBody();System.out.println(claims);// 解析SignatureString signature = claimsJws.getSignature();System.out.println(signature); }catch (Exception e){return false;}return true;
}

更多推荐

JWT——jjwt使用

本文发布于:2023-12-05 00:06:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1662529.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:JWT   jjwt

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!