Metadata-Version: 2.4
Name: jwt
Version: 1.4.0
Summary: JSON Web Token library for Python 3.
Author-email: Kohei YOSHIDA <kohei.yoshida@gehirn.co.jp>
Project-URL: Repository, https://github.com/GehirnInc/python-jwt.git
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Security
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: cryptography!=3.4.0,>=3.1
Provides-Extra: dev
Requires-Dist: black; extra == "dev"
Requires-Dist: isort; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Requires-Dist: types-freezegun; extra == "dev"
Provides-Extra: test
Requires-Dist: pytest~=6.0; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Requires-Dist: freezegun; extra == "test"
Dynamic: license-file

.. image:: https://travis-ci.org/GehirnInc/python-jwt.svg?branch=master
    :target: https://travis-ci.org/GehirnInc/python-jwt
.. image:: https://coveralls.io/repos/GehirnInc/python-jwt/badge.png?branch=master
    :target:  https://coveralls.io/r/GehirnInc/python-jwt?branch=master
.. image:: https://badge.fury.io/py/jwt.svg?dummy
    :target: http://badge.fury.io/py/jwt

python-jwt
==========

*python-jwt* is a JSON Web Token (JWT) implementation in Python developed by `Gehirn Inc`_.


Examples
--------

.. code-block:: python

   import json
   from datetime import datetime, timedelta, timezone

   from jwt import (
       JWT,
       jwk_from_dict,
       jwk_from_pem,
   )
   from jwt.utils import get_int_from_datetime


   instance = JWT()

   message = {
       'iss': 'https://example.com/',
       'sub': 'yosida95',
       'iat': get_int_from_datetime(datetime.now(timezone.utc)),
       'exp': get_int_from_datetime(
           datetime.now(timezone.utc) + timedelta(hours=1)),
   }

   """
   Encode the message to JWT(JWS).
   """

   # Load a RSA key from a JWK dict.
   signing_key = jwk_from_dict({
       'kty': 'RSA',
       'e': 'AQAB',
       'n': '...',
       'd': '...'})
   # Or load a RSA key from a PEM file.
   with open('rsa_private_key.pem', 'rb') as fh:
       signing_key = jwk_from_pem(fh.read())
   # You can also load an octet key in the same manner as the RSA.
   # signing_key = jwk_from_dict({'kty': 'oct', 'k': '...'})

   compact_jws = instance.encode(message, signing_key, alg='RS256')

   """
   Decode the JWT with verifying the signature.
   """

   # Load a public key from PEM file corresponding to the signing private key.
   with open('rsa_public_key.json', 'r') as fh:
       verifying_key = jwk_from_dict(json.load(fh))

   message_received = instance.decode(
       compact_jws, verifying_key, do_time_check=True)

   """
   Successfuly retrieved the `message` from the `compact_jws`
   """
   assert message == message_received


Installation
------------

You can install python-jwt with pip.

.. code-block:: shell

   $ pip install jwt


Implementation Details
-------------------------

Supported Algorithms
~~~~~~~~~~~~~~~~~~~~

- Unsecured

  - none (disabled by default for security)

- Symmetric

  - HS256
  - HS384
  - HS512

- Asymmetric

  - PS256
  - PS384
  - PS512
  - RS256
  - RS384
  - RS512

Supported Python Versions
~~~~~~~~~~~~~~~~~~~~~~~~~

- Python 3.6+


License
-------
python-jwt is licensed under the Apache License version 2.  See ./LICENSE.rst.


.. _Gehirn Inc: http://www.gehirn.co.jp/
