概念
JSON Web Token本質(zhì)上就是一串字符串,一串包含了很多信息的字符串令牌擁有三個部分頭部-包含加密算法和令牌類型{"alg":"算法名稱","type":"JWT"}負載-包含數(shù)據(jù)和信息-七個官方默認-也可以自己定義內(nèi)容{iss:發(fā)行人exp:到期時間sub:主題aud:用戶nbf:在此之前不可用iat:發(fā)布時間jti:JWT ID用于標(biāo)識該JWT}簽名-可以保護數(shù)據(jù)不被篡改
java-jwt
jwt在java中的應(yīng)用token驗證1.收到用戶客戶端輸入的用戶名和密碼的登錄請求2.驗證通過3.返回給用戶客戶端一個生成的token4.用戶客戶端收到token后存儲在客戶端-localstorage/cookies5.用戶客戶端每次請求后端服務(wù)時都會攜帶token-在頭部信息header中攜帶6.后端服務(wù)接受token,驗證通過則返回給請求的數(shù)據(jù),否則請求失敗在java應(yīng)用中-驗證通過時:創(chuàng)建token-后端請求時:解析token
創(chuàng)建token
1.創(chuàng)建頭部創(chuàng)建map集合,將頭部信息放進去-Map map = new HashMap<>()map.put("als","加密方式")map.put("typ","JWT")
2.創(chuàng)建負載聲明加密算法和使用的公鑰信息--加鹽Algorithm algorithm = Algoritem.HMAC265("szr")創(chuàng)建token,加入各種信息String token = JWT.created().//簽發(fā)人withIssur("szr").//受眾withAudience("自定義").//主題withSubject("szr").//簽發(fā)時間-生成時間-當(dāng)前時間withIssuedAt(new Date()).//過期時間-token時效性-不能一直有效-一小時withExpiresAt(System.currentTimeMillis() + 1000 * 60 * 60).//自定義內(nèi)容withClaim("name","szr").//加鹽sign(algorithm)
解析token
//根據(jù)加鹽內(nèi)容和公鑰獲取內(nèi)容JWTVerifier szr = JWT.require(algorithm).withIssuer("szr").build();DecodedJWT dec = szr.verify("獲取到的token");String name = dec.getClaim("name").asString();//結(jié)果為name=szr