- JWT 認證在 RESTful service 上的應用 (1) - JWT 說明
- JWT 認證在 RESTful service 上的應用 (2) - RESTful service
- JWT 認證在 RESTful service 上的應用 (3) - Angular
底下開始是第一篇 … JWT 說明
JWT 是在 http 的 header 中放入一小段加密的字串,通常會放在命名為 Authorization 的欄位裡,這段字串分三段,每段以句點 ( . ) 隔開,這三段分別為 Header、Payload、Signature,Header 和 Payload 是 JSON 格式並且以 Base64 編碼的字串,Signature 是簽章,用來驗證前面的 header、payload 有沒有被竄改,說明如下:- Header
{ "alg": "HS256", "typ": "JWT" }
- Payload
{ "iss": "steven", "company": "Google", "sub": "test" }
- Signature
var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload); var signature = HMACSHA256(encodedString, key);
上面的 Signature 產生方式如果以 Java 來寫,如下:
String header64 = Base64.encode(header.getBytes()); String payload64 = Base64.encode(payload.getBytes()); Mac sha512_HMAC = Mac.getInstance("HmacSHA512"); SecretKeySpec secret_key = new javax.crypto.spec.SecretKeySpec(Base64.decode(key), "HmacSHA512"); sha512_HMAC.init(secret_key); byte[] mac_data = sha512_HMAC.doFinal((header64 + "." + payload64).getBytes()); String signature = Base64.encode(mac_data);
產生 signature 後,要將整個 JWT token 放入 Header 的 Authorization,一般會在 token 前加上 "Bearer ",所以會如下: (Bearer 後面有一個空白)
HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", "Bearer " + header64 + "." + payload64 + "." + signature);
沒有留言:
張貼留言