【发布时间】:2021-05-14 17:47:42
【问题描述】:
我有一个 JWT 令牌,我正在尝试将其转换为 JSON - 标头显示正常,但负载不显示 - 任何信息都会有所帮助
我的令牌
eyJ6aXAiOiJERUYiLCJhbGciOiJFUzI1NiIsImtpZCI6IjNLZmRnLVh3UC03Z1h5eXd0VWZVQUR3QnVtRE9QS01ReC1pRUxMMTFXOXMifQ.3VNNj9owEP0rq9lrSOKwhZJTF3pptapW2m0vFQfjDMSVP5DtBOgq_71jA9tWWrj1Ut8mfvPmvefJC0jvoYY2hK2vi8Jr7kKLXIU2F9w1vsA911uFviBghw4ykDxAzSZsPJlMxiXLyzuWQS-gfoEPwpqAe7r__kq52-3y3Ti3blNUJXtfCIcNmiC58kXPYJlBOGwxdnxDJ9eSrxQuXjE076K222MxisVVnNS6M_InD9Kaq0Bhe9mwWRT1W-ZTt_qBIkR_61Y6UukjTw13eZkz4otf551pFEaMQ287J_A5uYLTxdklCKsUsR2V0AB3IOvE3Cn11SkCnPvrkgDn4g3iR7JD_QQyXOORhGupiA_uDWGcTzM2skcT4_1s21jPc1gOZHCDpqH3rEHzpG8lKYyPPERuNnvHRiUbVSUMQ_amOnZd3ae_I_eBh84n-3GbAsYH67kQ0uDCNolB2EaaTTLiDz6gPu0lvVSrpmmBYtKFl00h-j0RiNQJVTmFYTlksD1FkuSs0aGJ2v5MlEBWiM6lq2j2WeojRZUMl9HW1knajMPTyVtwHWagrDiauUQ-juTKhi-dXqVcH2y4uS3TYRdjrP7LGKvZP4lxejHG8fUYH85Tzz8L3M8XN48td5qLA7EuBzq_AA._juD-OGeaRIRVqIXji_13lHvrpmhw57DpZrZqbNUgjeqjSLwUc8qbzzbai82fGN5KzHgWFKy4v45hzd89GBO7Q
我正在使用 jsonwebtoken 库
var jwt = require("jsonwebtoken");
var decoded = jwt.decode(token, {complete: true});
console.log(decoded.header);
console.log(decoded.payload);
输出
{
zip: 'DEF',
alg: 'ES256',
kid: '3Kfdg-XwP-7gXyywtUfUADwBumDOPKMQx-iELL11W9s'
}
�SM��0�+��kHⰅ�Szi��V�m/�
ĕ?���*��c�VZ��R�&~����
a�O36�G��l�X�sXdp�����A�o%)��<Dn6{�F%%�{ٰY�[�S���"D�V:R�#O�\�6�5��=�[�� `�2�<@�&l<�L�%��;�A/�~�š�{���J�����8�nST%{�
C��:v]ݧ�#����'�q������6�A�F�M2�>�>�%�T��i�b҅�M!�=�� U9�a9d�=E��ѡ���L�@V�Υ�h�Y�#E�
����Iڌ���[pf��8��D>��ʆ/�^�\l��-�ac�����?�qz1����S�?
��7�-w���.:�
我在 Python 中做了同样的事情 - 这对我来说非常有效
//Retrieve the Headers which are needed to retrieve the public key
headers = jose_jws.get_unverified_headers(encoded)
print(headers)
// Now attempt to decode the JWT/JWS. This would be followed by
// validation once the public key had been retrieved
decoded = jose_jws.get_unverified_claims(encoded)
print(decoded)
JAVASCRIPT
【问题讨论】:
-
你有用于创建令牌的私钥和其他设置吗?
-
我在 python 中做了同样的事情 - 不需要任何密钥 # 检索获取公钥所需的标头 headers = jose_jws.get_unverified_headers(encoded) print(headers) #print("") # 现在尝试解码 JWT/JWS。这将是 # 验证一旦检索到公钥 decoded = jose_jws.get_unverified_claims(encoded) print(decoded)
-
我建议使用 jose 包而不是 jsonwebtoken。它似乎更有能力:github.com/panva/jose
-
请注意,有效负载确实需要是有效的 JSON 对象。如果该屏幕截图显示了实际的有效负载......这就是 jwt.io 不起作用的原因;它不是有效的有效载荷。显然,您使用的任何 Python 工具都没有验证 JWT 的有效负载。
-
var base64url = require('base64url'); var payload = "3VNN...q_AA"; var payloadDec = base64url.toBuffer(payload).toString('hex'); console.log(payloadDec);和base64url来自 npmjs.com/package/base64url。
标签: javascript jwt