簡體   English   中英

解碼 jwt 頭 python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM