2017-12-19 23 views
0

에 나는 Auth0에서 얻을 JWT를 디코딩하는 것을 시도하고있다. 내가 jwt.io에 갈 때, 그들은 당신이에 JWT를 넣을 수 있습니다 디코더를 가지고 있고, 그것은 당신에게 JWT의 각 섹션에 대한 모든 정보를 알려드립니다. 모든 정보가 정확하다는 것을 알 수 있습니다. 내가 직접 해독하려고하면이 오류가 발생합니다. 내 Auth0 등록 된 클라이언트 정보와 비밀 키를 얻고, 다음과 같이 말한다 메모가 : 클라이언트 비밀은 base64로 인코딩되지는. 이 암호를 사용하기 전에 base64로 인코딩해야합니까?JWT는 jwt.io에 디코딩,하지만 응용 프로그램

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

당신이 PUBLIC KEY 나 개인 키를 언급하지 않기 때문에, 당신은 "RS256"알고리즘을 사용하여 디코딩하려고처럼 보이지만 토큰 사용 " HS256 ".

시도 :

decoded_jwt = jwt.decode (encoded_jwt, 비밀, 알고리즘 = "HS256")

대신 :

decoded_jwt = jwt.decode (encoded_jwt, 비밀, 알고리즘 = "RS256") 당신은이 주소에 좋아하는 경우에 64 기수를 사용하여 키 인코딩 자유롭게

: https://www.base64encode.org/

당신은 VERIFY 서명 섹션에서 jwt.io에서 확인란 "인코딩 된 비밀 base64로"를 선택하여 인코딩 된 키를 확인할 수 있습니다.

+0

RSA 인증서에서 공용/개인 키를 얻는 방법을 알지 못하겠습니까? 이 글을 쓰는 시점에서 나는 Auth0에서 내 client_secret을 사용 생각했지만, 지금은 많은 연구 후에 나는 인증서에서 가져온 공개 키가 필요하다는 것을 알고있다. 나는 인증서를 얻을 수 있었지만 공개 키를 얻는데 많은 어려움을 겪고 있습니다. – JBT

+0

이 링크는 도움이 될 수 있습니다. https://stackoverflow.com/questions/9497719/extract-public-private-key-from-pkcs12-file-for-later-use-in-ssh-pk-authenticati –