JWT技术的简单使用
来源:华佗健康网
JWT介绍:
JSON Web token简称JWT, 是用于对应用程序上的用户进行身份验证的标记。也就是说, 使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据。此特性便于可伸缩性, 同时保证应用程序的安全。
在身份验证过程中, 当用户使用其凭据成功登录时, 将返回 JSON Web token, 并且必须在本地保存 (通常在本地存储中)。每当用户要访问受保护的路由或资源 (端点) 时, 用户代理(user agent)必须连同请求一起发送 JWT, 通常在授权标头中使用Bearer schema。后端服务器接收到带有 JWT 的请求时, 首先要做的是验证token。
JWT流程:
JWT格式:
JWT就是一个字符串,经过编码处理与校验处理的字符串,形式为:A.B.C
-
A:由JWT头部信息header进行base64url编码得到,主要是JWT的元信息,如签名算法、令牌类型等等
-
B:由JWT用到的身份验证信息json数据base64url编码得到。存储的就是实际要传递的数据
-
C:由A和B使用密钥计算得到的数字签名,是校验部分,用于防止数据被篡改
注意:token数据并没有真正加密,所以不要放敏感数据
使用示例:
导入依赖:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
示例:
package com.tanhua.server.test;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
public class JwtTest {
@Test
public void testCreateToken() {
//1 准备身份信息
Map<String, Object> claims = new HashMap<>();
claims.put("mobile", "13800138000");
claims.put("id", 1);
//2 生成token
String token = Jwts.builder()
.setClaims(claims) //设置身份信息
.signWith(SignatureAlgorithm.HS256, "%%$$#$%$") //设置加密的密钥key
.compact(); //生成token
System.out.println(token);
}
@Test
public void testParseToken() {
String token = "eyJhbGciOiJIUzI1NiJ9.eyJtb2JpbGUiOiIxMzgwMDEzODAwMCIsImlkIjoxfQ.G_LTT7bwHe4J8ajBE6Ui494440MkOTA95EE5PLSW590";
//解析token
Claims claims = Jwts.parser()
.setSigningKey("%%$$#$%$") //设置解密需要的密钥key
.parseClaimsJws(token) //解析token
.getBody(); //得到解析后的结果
System.out.println(claims);
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容