【问题标题】:Converting a JWT Token to JSON in JavaScript在 JavaScript 中将 JWT 令牌转换为 JSON
【发布时间】: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)

Python

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


【解决方案1】:

zip: 'DEF' 表示有效载荷已放气。你可以试试inflating 回来。

话虽如此,“zip”或压缩仅针对 JWE(JSON Web 加密)定义,而不是 JWS(JSON Web 签名)或 JWT。正确的 JWT 有效负载必须始终是顶级 JSON 对象并且没有压缩。

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 2019-10-17
    • 2013-06-28
    • 2015-10-30
    • 2017-05-09
    • 2012-11-20
    • 2019-07-13
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多