JWT原理 使用(入門篇)
阿新 • • 發佈:2019-09-03
1、JWT簡介
JWT:Json Web Token,是基於Json的一個公開規範,這個規範允許我們使用JWT在使用者和伺服器之間傳遞安全可靠的資訊,他的兩大使用場景是:認證和資料交換 使用起來就是,由服務端根據規範生成一個令牌(token),並且發放給客戶端。此時客戶端請求服務端的時候就可以攜帶者令牌,以令牌來證明自己的身份資訊。 作用:類似session保持登入狀態 的辦法,通過token來代表使用者身份。2,JWT生成
3,JWT校驗
4,一些問題
a、token到底生成什麼樣最好?(規則),每個使用者要唯一 b、token返回給客戶端之後,服務端還要儲存嗎? c、校驗token時,怎麼保證資料並沒有被黑客攔截並篡改?(安全) d、token頒發給客戶端之後,要不要有過期時間? e、多次登入生成的token都是一樣的嗎?都是可用的嗎?5,JWT規則詳解
6,JWT令牌的優點:
a、jwt基於json,非常方便解析 b、可以再令牌中自定義豐富的內容,易擴充套件(payload可以擴充套件) c、通過簽名,讓JWT防止被篡改,安全性高 d、資源服務使用JWT可不依賴認證服務即可完成授權7,demo測試
1 /** 2 * JWT 測試controller 3 * 4 * @author wangmeng 5 * @date 2019/9/2 6 */ 7 @RestController 8 @RequestMapping(value = "/user", produces = { "application/json; charset=UTF-8" }) 9 public class JWTController { 10 11 12 private static final String SECRET = "[email protected]"; 13 14 15 @RequestMapping("/login/{username}/{password}") 16 public Map login(@PathVariable String username, @PathVariable String password) { 17 Map result = new HashMap(); 18 if (username.equals("admin") && password.equals("123456")) { 19 String jwt = Jwts.builder(). 20 setSubject(username). 21 signWith(SignatureAlgorithm.HS512, SECRET). 22 compact(); 23 result.put("token", jwt); 24 } else { 25 result.put("message", "賬號密碼錯誤"); 26 } 27 28 29 return result; 30 } 31 32 33 @RequestMapping("/goods/{token}") 34 public Map verifyToken(@PathVariable String token) { 35 Map result = new HashMap(); 36 Jws<Claims> claimsJws = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token); 37 result.put("username", claimsJws.getBody().getSubject()); 38 return result; 39 } 40 }