/python-jose

A JOSE implementation in Python

Primary LanguagePythonMIT LicenseMIT

python-jose

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.

Installation

$ 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[crytography]
$ pip install python-jose[pycryptodome]
$ pip install python-jose[pycrypto]

Usage

>>> from jose import jwt
>>> token = jwt.encode({'key': 'value'}, 'secret', algorithm='HS256')
u'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ2YWx1ZSJ9.FG-8UppwHaFp1LgRYQQeS6EDQF7_6-bMFegNucHjmWg'

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

Thanks

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