JWT概念
JWT组成
Java实现JWT
Header
String getHeader() {String header = "{\"alg\":\"HS256\",\"typ\":\"JWT\"}";String encodeBase64URLSafeString = Base64.encodeBase64URLSafeString(header.getBytes(StandardCharsets.UTF_8));System.out.println(encodeBase64URLSafeString); }
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
PayLoad
void getPayLoad(){String payload = "{\"sub\":\"7isi\",\"id\":\"1001\",\"role\":\"admin\"}";String encodeBase64URLSafeString = Base64.encodeBase64URLSafeString(payload.getBytes(StandardCharsets.UTF_8));System.out.println(encodeBase64URLSafeString); }
eyJzdWIiOiI3aXNpIiwiaWQiOiIxMDAxIiwicm9sZSI6ImFkbWluIn0
Signature
@Test void generatesignature() throws NoSuchAlgorithmException, InvalidKeyException {String secret = UUID.randomUUID().toString().replaceAll("-", "");String data = getHeader() +"." + getPayLoad();Mac mac = Mac.getInstance("HmacSHA256");SecretKeySpec spec = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8),"HmacSHA256");mac.init(spec);byte[] bytes = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));String res = Base64.encodeBase64URLSafeString(bytes);String jwt = data + "." + res;System.out.println(jwt); }
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3aXNpIiwiaWQiOiIxMDAxIiwicm9sZSI6ImFkbWluIn0.vpwacNY4fLdQzF7iSDyGLnYMqbgBoWRVLNG7Ail15Ss
验证签名值
计算出来和原来的对比,我们的secreat是早就准备好的
Web中使用JWT
JJWT
依赖
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.5</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.11.5</version><scope>runtime</scope></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.11.5</version><scope>runtime</scope></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version><scope>runtime</scope></dependency>
例子
生成jws
RSA算法的支持
JWT安全密钥实现
以下是jwt,没有签名,文档错误
自定义key
压缩
获取jwt的数据
add是往后添加