jpadilla / pyjwt

JSON Web Token implementation in Python
https://pyjwt.readthedocs.io
MIT License
5.05k stars 676 forks source link

Error in serailization pyjwt #834

Closed arjunChouksey closed 1 year ago

arjunChouksey commented 1 year ago

target - using asymmetric alogrithm rs256 for creating jwt token error -

 Traceback (most recent call last):
  File "/home/arjun/Desktop/tickertom/rule-orchestrator/apps/factory/auth.py", line 67, in <module>
    print(Auth.create("absdadasdsadsadcd"))
  File "/home/arjun/Desktop/tickertom/rule-orchestrator/apps/factory/auth.py", line 55, in create
    token = encode(
  File "/home/arjun/Desktop/tickertom/rule-orchestrator/celery-venv/lib/python3.10/site-packages/jwt/api_jwt.py", line 63, in encode
    json_payload = json.dumps(
  File "/usr/lib/python3.10/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/usr/lib/python3.10/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python3.10/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python3.10/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type bytes is not JSON serializable

steps to recreate -

from jwt import decode, encode
from cryptography.hazmat.primitives.serialization import  load_pem_private_key
from cryptography.hazmat.backends import default_backend
from apps.config import JWT_PRIVATE_CERTTIFICATE

def create(payload:str) -> str:
        """
        Method used to sign jwt token
        """
        # print(JWT_PRIVATE_CERTTIFICATE)
        payload, private_key = {
            "id": payload,
            "r": b2a_hex(urandom(48)),
            "exp": current_timezone_time() + timedelta(minutes=4)
        }, load_pem_private_key(JWT_PRIVATE_CERTTIFICATE.encode(), password=None, backend=default_backend())

        token = encode(
            payload,
            private_key,
            algorithm="RS256"
        )

        return token

create("absdadasdsadsadcd")

private certificate is -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQCQiJlNPGE8K2QDGnfp46rnnDMga5kIrwmcsagi0OG1OrmuEA4E uIm77hsJ5rOAAmwMS9CCN0EbpX4G/TansVzhEw7Vb3sAHQL1W2l5ZTbNRGBGK+dj X5vWQnPnzX4YWE/Clhay6PlnVzLVAtI1gAO80/AoRU4GuLmps2On/X+m8wIDAQAB AoGAfYKRlbecPJL1i5hdj3cL/4rt/vZQ83CE6VSBTJKVnjo76gK5GbJisRbI1iVH tR7lUxw3Ggz/dhGVSl5zKtZjbxvnu0oJOdhAY3bDaITwzm3byZnru8MLeAC7CIRT zWQkydEb0A22oriS2BDqGIleUj0VW01VESeMJSzkN2UMnekCQQD3MUOMfbSDsY0k gkVVUk6akiNGSda7Adlh7Ui6yOBRg0ttBq1YpAcmOaRnJnf994aSVJVCPoHAXZqF kEsZO4MlAkEAla7x0mpiCLYuxWdhORO7103W8NZJif9w74AZCXwrNhaHhDnPTIz9 fDe1THFCzp4Z22Qpvsn7tlU6SkMGsxByNwJBAJJ2dw6UINPy7K0YHtqaBQbi1dG8 yGVPiCzUukYp5XeGsrcrwKQHtFC60KVpjqlE81Bam4F/pcOD8p12zHhr4Z0CQCQp bMCx9Nc39Fq6nBFnBBWC96+dhYyySr2BzAqvldzuWnUGZl+PHFpbNxCtuD8kkQig zTkLoSUut/Ni+AZgrccCQQC5i+el95mdGs4yCUgtx34hw/iDr4JdC/dRwWwlm3dj owr4/0XfVSorcx9ZKz4yiyi4Hlfae4No7aeVYfmVGD6z -----END RSA PRIVATE KEY-----

can somebody tell what is wrong

arjunChouksey commented 1 year ago

Sorry NVM, issue here lies in payload, as b2a_hex() gives bytes that cause serilization issue. Closing this issue