jwt:json web token 的縮寫
由三部分組成:header(頭部)、payload(負載)、signature(簽名)。
因此,jwt通常如下所示:
***xx.yyyyy.zzzzz
1 header(頭部)
由令牌的型別(即jwt)和正在使用過的簽名演算法組成。如:
那麼,這個json是base64url編碼成jwt的第一部分。
2 payload(負載)
payload是令牌jwt的第二部分。包含的是請求體和其它一些資料。
載荷的屬性有三類:
預定義(registered) 公有(public) 私有(private)
2.1 預定義的載荷
這裡面的前 7 個字段都是由官方所定義的,也就是預定義(registered claims)的,並不都是必需的。
iss (issuer):簽發人
sub (subject):主題
aud (audience):受眾
exp (expiration time):過期時間
nbf (not before):生效時間,在此之前是無效的
iat (issued at):簽發時間
jti (jwt id):編號
2.2 公有的載荷
在使用 jwt 時可以額外定義的載荷。為了避免衝突,應該使用 iana json web token registry 中定義好的,或者給額外載荷加上類似命名空間的唯一標識。
2.3 私有載荷
在資訊互動的雙方之間約定好的,既不是預定義載荷也不是公有載荷的一類載荷。這一類載荷可能會發生衝突,所以應該謹慎使用。
3 signature(簽名)
簽名屬於jwt的第三部分。主要是把頭部的base64urlencode與負載的base64urlencode拼接起來,再進行hmacsha256加密,加密結果再進行base64url加密,最終得到的結果作為簽名部分。
加密過程如下:
base64url(
hmacsha256(
base64urlencode(header) + "." + base64urlencode(payload),
your-256-bit-secret (秘鑰加鹽)
) )
如果乙個客戶端帶著jwt請求服務端,服務端要確保這個請求是合法並且沒有被篡改的請求,那麼服務端是需要乙個規則來進行驗證的。所以上述簽名的加密過程就是服務端的使用的規則,加密結果再和jwt的第三部分進行匹配,確定是否相同,如果相同則為合法請求。如果不相等,則為非法請求。
非法者非法請求的時候,可以通過同樣的規則來偽造乙個jwt,但是客戶端一般是不知道服務端的金鑰的(鹽),所以非法者幾乎不能偽造出合法的請求。
jwt 私鑰 JWT 開發設計詳解
什麼是 jwt jwt 全稱是 json web token jwt 是乙個 開放標準 rfc 7519 它定義了一種緊湊且自包含的方式,用於在各方之間作為 json 物件安全地傳輸資訊。由於此資訊是經過數字簽名的,因此可以被驗證和信任。可以使用金鑰 hmac演算法 或使用 rsa 或 ecdsa ...
常用的使用者認證方式 詳解JWT
和session的區別和優缺點 總結authentication 使用者認證,指的是驗證使用者的身份,例如你希望以小a的身份登入,那麼應用程式需要通過使用者名稱和密碼確認你真的是小a。由於http協議是無狀態的,每一次請求都無狀態。當乙個使用者通過使用者名稱和密碼登入了之後,他的下乙個請求不會攜帶任...
jwt使用小結 1 概念詳解
jwt 全稱 json web tokens 是乙個非常輕巧的規範。這個規範允許我們使用 jwt 在使用者和伺服器之間傳遞安全可靠的資訊.jwt 預設是不加密的,任何人都可以解密出來讀到,所以不要把秘密資訊放在裡面。它的兩大使用場景是 認證和資料交換 jwt由三部分組成 加粗樣式部分是乙個json物...