json web token (jwt)是乙個開放標準(rfc 7519),它定義了一種緊湊的、自包含的方式,用於作為json物件在各方之間安全地傳輸資訊。該資訊可以被驗證和信任,因為它是數字簽名的。
下列場景中使用json web token是很有用的:
authorization (授權) : 這是使用jwt的最常見場景。一旦使用者登入,後續每個請求都將包含jwt,允許使用者訪問該令牌允許的路由、服務和資源。單點登入是現在廣泛使用的jwt的乙個特性,因為它的開銷很小,並且可以輕鬆地跨域使用。
information exchange (資訊交換) : 對於安全的在各方之間傳輸資訊而言,json web tokens無疑是一種很好的方式。因為jwts可以被簽名,例如,用公鑰/私鑰對,你可以確定傳送人就是它們所說的那個人。另外,由於簽名是使用頭和有效負載計算的,您還可以驗證內容沒有被篡改。
json web token由三部分組成,它們之間用圓點(.)連線。這三部分分別是:
因此,乙個典型的jwt看起來是這個樣子的:
***xx.yyyyy.zzzzz
header
header典型的由兩部分組成:token的型別(「jwt」)和演算法名稱(比如:hmac sha256或者rsa等等)。
例如:然後,用base64對這個json編碼就得到jwt的第一部分
payload
jwt的第二部分是payload,它包含宣告(要求)。宣告是關於實體(通常是使用者)和其他資料的宣告。宣告有三種型別: registered, public 和 private。
registered claims : 這裡有一組預定義的宣告,它們不是強制的,但是推薦。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。
public claims : 可以隨意定義。
private claims : 用於在同意使用它們的各方之間共享資訊,並且不是註冊的或公開的宣告。
下面是乙個例子:
對payload進行base64編碼就得到jwt的第二部分
注意,不要在jwt的payload或header中放置敏感資訊,除非它們是加密的。
signature
為了得到簽名部分,你必須有編碼過的header、編碼過的payload、乙個秘鑰,簽名演算法是header中指定的那個,然對它們簽名即可。
例如:hmacsha256(base64urlencode(header) + "." + base64urlencode(payload), secret)
簽名是用於驗證訊息在傳遞過程中有沒有被更改,並且,對於使用私鑰簽名的token,它還可以驗證jwt的傳送方是否為它所稱的傳送方。
典型模組如下:
// header
// payload
// $signature
hs256(base64(header) + "." + base64(payload), "自定義金鑰kyey" )
// jwt
jwt = base64(header) + "." + base64(payload) + "." + $signature
public static string createjwt(object subject, long ttlmillis)
//生成jwt
return builder.compact();
}
具體compact()方法即根據傳入的引數進行處理 最終得到jwt的字串
eyjhbgci**i1nij9.eyjqdgkioijqd3qil**dy2ntmxoh0.x9fnw**2fe4ht
參考: JWT簡單了解
json web token jwt 是乙個非常輕巧的規範。這個規範允許我們使用jwt在使用者和伺服器之間傳遞安全可靠的資訊。乙個jwt實際上就是乙個字串,它由三部分組成,頭部 包含型別以及簽名所用的演算法 header 載荷 jwt的標準所定義 payload與簽名signature。base64...
JWT單點登入
jwt單點登入 什麼是jwt介紹的比較清楚 jwt的優勢和劣勢等 註冊過程中,密碼從前台在傳輸到後台過程中,如何防止密碼被竊取或篡改?前台通過js加密下,後台通過演算法解密,再用後台方式加密,最後放到資料庫中 抓包技術。認證就是判斷你有沒有許可權獲取資料 鑑權就是看看你有沒有權利操作某個東西 使用密...
jwt使用者登入
jwt就是一段字串,由三段資訊構成,第一部分是頭部 header,宣告token型別,宣告簽證的加密演算法 第二部分是載荷 payload,類似於飛機上承載的物品,存放標準宣告 公共宣告 私有宣告 第三部分是簽證 signature,辨真偽 防篡改 pip install djangorestfra...