[英]Decode jwt header python
我有一個令牌,其中包含以下標題eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ
。 我如何獲得jwt.io提供的以下 JSON 解碼?
{
"kid": "86D88Kf",
"alg": "RS256"
}
jwt.decode()
沒有給出這個頭。
在 PyJwt 中,為此使用get_unverified_header(token)
。 這對於在驗證令牌之前獲取密鑰 ID ( kid
) 特別有用。 所以在最后一行我展示了如何從標題中提取kid
。
import jwt
token = "eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
header = jwt.get_unverified_header(token)
print (header)
print (header['kid'])
結果:
{'孩子':'86D88Kf','alg':'RS256'}
86D88Kf
如文檔中所述
這是一個未加密的標題。 它是您想要的數據的 JSON 編碼的 URL 安全 base64 編碼。 您需要在編碼字符串的末尾添加填充字符以確保其位於 4 個字符的邊界上,然后進行解碼。
>>> import json
>>> import base64
>>> token = "eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ"
>>> padded = token + "="*divmod(len(token),4)[1]
>>> padded
'eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ=='
>>> jsondata = base64.urlsafe_b64decode(padded)
>>> jsondata
b'{"kid":"86D88Kf","alg":"RS256"}'
>>> data = json.loads(jsondata)
>>> data
{'kid': '86D88Kf', 'alg': 'RS256'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.