Python中JWT-Json Web Token的使用

1 下載安裝PyJWT。我這裏使用的版本是1.7.1,環境Python3.6.3

pip install PyJWT==1.7.1

2 導入生成JWT

import jwt
# 設置payload
token_dict = {
	'iat': time.time(),
	'name': 'xxx'  # 可加入自定義的參數
}
"""
payload一些固定參數的介紹,如上面的‘iat’.
iss  【issuer】發佈者的url地址
sub 【subject】該JWT所面向的用戶,用於處理特定應用,不是常用的字段
aud 【audience】接受者的url地址
exp 【expiration】 該jwt銷燬的時間;unix時間戳
nbf  【not before】 該jwt的使用時間不能早於該時間;unix時間戳
iat   【issued at】 該jwt的發佈時間;unix 時間戳
jti    【JWT ID】 該jwt的唯一ID編號
"""
# 設置headers
headers = {
    'alg': "HS256", 
}
"""
# headers中一些固定參數的說明
jku: 發送JWK的地址;最好用HTTPS來傳輸
jwk: 就是之前說的JWK
kid: jwk的ID編號
x5u: 指向一組X509公共證書的URL
x5c: X509證書鏈
x5t:X509證書的SHA-1指紋
x5t#S256: X509證書的SHA-256指紋
typ: 在原本未加密的JWT的基礎上增加了 JOSE 和 JOSE+ JSON。JOSE序列化後文會說及。適用於JOSE標頭的對象與此JWT混合的情況。
crit: 字符串數組,包含聲明的名稱,用作實現定義的擴展,必須由 this->JWT的解析器處理。不常見。
"""
# 生成json web token
# 調用jwt庫,生成json web token
jwt_token = jwt.encode(
	token_dict,  # payload, 有效載體
    "abcdefg123456",  # 進行加密簽名的密鑰
    algorithm="HS256",  # 指明簽名算法方式, 默認也是HS256
    headers=headers  # json web token 數據結構包含兩部分, payload(有效載體), headers(標頭)
    ).decode('utf-8')  # python3 編碼後得到 bytes, 再進行解碼(指明解碼的格式), 得到一個str

3 進行JWT的認證

# 生成json web token 後進行認證
try:
  #需要解析的 jwt密鑰使用和加密時相同的算法
	data = jwt.decode(
	token,  # 生成的jwt
	"abcdefg123456",  # 加密時的祕鑰
	algorithms=['HS256'])  # 加密時使用的算法
except Exception as e:
  # 如果 jwt 被篡改過; 或者算法不正確; 如果設置有效時間, 過了有效期; 或者密鑰不相同; 都會拋出相應的異常
  print(e)
# 最後解析出來的數據就是先前加密時放入payload中的內容
data = {
	'iat': time.time(),
	'name': 'xxx'
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章