代码之家  ›  专栏  ›  技术社区  ›  TJB

JWT在JWT上解码。io,但不在应用程序中

  •  0
  • TJB  · 技术社区  · 7 年前

    我正在尝试解码从Auth0获得的JWT。当我去jwt的时候。io,他们有一个解码器,你可以把一个JWT放进去,它会告诉你关于JWT每个部分的所有信息。我看得出所有的信息都是正确的。当我试图自己解码时,我发现了这个错误。 我从Auth0注册的客户机信息中获取密钥,注意:客户机密钥不是base64编码的。在使用此密码之前,是否需要对其进行base64编码?

    ValueError: Could not unserialize key data.
    

    航空站

    >>> import jwt
    
    >>> secret = secret
    >>> encoded_jwt = encoded_jwt
    >>> decoded_jwt = jwt.decode(encoded_jwt, secret, algorithm="RS256")
    
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python3.6/site-packages/jwt/api_jwt.py", line 78, in decode
        jwt, key=key, algorithms=algorithms, options=options, **kwargs
      File "/usr/local/lib/python3.6/site-packages/jwt/api_jws.py", line 140, in decode
        key, algorithms)
      File "/usr/local/lib/python3.6/site-packages/jwt/api_jws.py", line 204, in _verify_signature
        key = alg_obj.prepare_key(key)
      File "/usr/local/lib/python3.6/site-packages/jwt/algorithms.py", line 207, in prepare_key
        key = load_pem_public_key(key, backend=default_backend())
      File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/primitives/serialization.py", line 24, in load_pem_public_key
        return backend.load_pem_public_key(data)
      File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/multibackend.py", line 314, in load_pem_public_key
        return b.load_pem_public_key(data)
      File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1110, in load_pem_public_key
        self._handle_key_loading_error()
      File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1325, in _handle_key_loading_error
        raise ValueError("Could not unserialize key data.")
    ValueError: Could not unserialize key data.
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Peter RD    7 年前

    由于您没有提到公钥或私钥,看起来您正在尝试使用“RS256”算法进行解码,但您的令牌使用“HS256”。

    尝试:

    解码\u jwt=jwt。解码(encoded\u jwt,secret,algorithm=“HS256”)

    而不是:

    解码\u jwt=jwt。解码(encoded\u jwt,secret,algorithm=“RS256”)

    如果您愿意,可以在以下地址使用base64对密钥进行编码: https://www.base64encode.org/

    您可以通过选中jwt中的“secret base64 encoded”复选框来验证编码密钥。io,在验证签名部分下。