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