A JOSE implementation in Python
Clone or download
mpdavis Merge pull request #97 from shenek/setup_py_tests
trigger tests using `python setup.py test`
Latest commit e70b625 Aug 6, 2018



A JOSE implementation in Python

Build Status Coverage Status Docs

Docs are available on ReadTheDocs.

The JavaScript Object Signing and Encryption (JOSE) technologies - JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign content using a variety of algorithms. While the full set of permutations is extremely large, and might be daunting to some, it is expected that most applications will only use a small set of algorithms to meet their needs.


$ pip install python-jose

Custom Backends

As of 3.0.0, python-jose uses the pure-python rsa module by default for RSA signing and verification. If necessary, other RSA backends are supported. Options include crytography, pycryptodome, and pycrypto.

In order to use a custom backend, install python-jose with the appropriate extra.

It is recommended that a custom backend is used in production, as the pure-python rsa module is slow.

The crytography option is a good default.

$ pip install python-jose[cryptography]
$ pip install python-jose[pycryptodome]
$ pip install python-jose[pycrypto]


>>> from jose import jwt
>>> token = jwt.encode({'key': 'value'}, 'secret', algorithm='HS256')

>>> jwt.decode(token, 'secret', algorithms=['HS256'])
{u'key': u'value'}


This library was originally based heavily on the work of the folks over at PyJWT.