jwt学习
什么是JWT?
jwt的全稱是JSON Web Token;JSON Web
Token是一個開源標準(rfc7519),是一個輕量,攜帶著用戶信息的json
Object對象,安全的進行服務器端與客戶端交互;這個對象可以校驗、信任,因為它由數字組成;
輕量:因為輕量,所以可以更好地放在httpheader里面,在服務器與客戶端之間快速交互
攜帶用戶信息:將用戶的重要信息:userId,userName等放在jwt當中,不用再次從數據庫當中獲取
什么時候使用?
需要認證:用戶根據username、password登錄后,使用jwt返回一個token給客戶端,客戶端在請求的時候將token放在http
header當中給服務器端,服務器端校驗token的合法性,然后處理請求的response
用戶信息被改變:
jwt的結構
基本結構
由header、payload、sinature三部分組成,最終以xxx.yyy.zzz的形式拼接
header
header由兩部分組成:
- type of token : JWT
- 加密算法: HMAC/SHA256/RSA
payload
payload里面存放著用戶的信息,可以使用claims進行復合拼裝,claims由已定義、public、private三部分組成
- resolved(已定義):iss/exp/sub/aud
- public:url信息
- private:用戶信息
payload當中的數據都可以由用戶自行設置
sinature
簽名,根據header、payload和一個用戶設置的密碼(secret),生成一個簽名,最后將header,payload,sinature拼接成xxx.yyy.zzz形式
怎么使用(java)
pom.xml里面引入jwt
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.7.0</version> </dependency> public static void main(String[] args) {String secret = "password";String userId = "zhangsan";String userName = "張三";// 輸出的jwt:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ6aGFuZ3NhbiIsInVzZXJOYW1lIjoi5byg5LiJIn0.024kCUw4nodiXEdeOWtjWFn8u2eoh-DdfmLiXYgZs9gString jwt = Jwts.builder().setSubject(userId).signWith(SignatureAlgorithm.HS256, secret).claim("userName", userName).compact();System.out.println(jwt);// 客戶端將Jwt傳遞給服務器,服務器根據secret進行解密,可以對jwt進行校驗,取數據Jws<Claims> claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(jwt);//header={alg=HS256},body={sub=zhangsan, userName=張三},signature=024kCUw4nodiXEdeOWtjWFn8u2eoh-DdfmLiXYgZs9gSystem.out.println(claims);}由上面可以看出claims里面存放的數據由header、body、signature三部分組成
轉載于:https://www.cnblogs.com/penggy/p/6710017.html
總結
- 上一篇: ubuntu终端彻底删除软件
- 下一篇: sigmoid function vs