Skip to main content
https://travis-ci.org/GehirnInc/python-jwt.svg?branch=master https://coveralls.io/repos/GehirnInc/python-jwt/badge.png?branch=master https://badge.fury.io/py/jwt.svg?dummy

python-jwt

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

Examples

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.

$ 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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jwt-1.4.0.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jwt-1.4.0-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

Details for the file jwt-1.4.0.tar.gz.

File metadata

  • Download URL: jwt-1.4.0.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for jwt-1.4.0.tar.gz
Algorithm Hash digest
SHA256 f6f789128ac247142c79ee10f3dba6e366ec4e77c9920d18c1592e28aa0a7952
MD5 5dc46cd3fc8e1e0c8eb25f39be5558a1
BLAKE2b-256 7f2021254c9e601e6c29445d1e8854c2a81bdb554e07a82fb1f9846137a6965c

See more details on using hashes here.

File details

Details for the file jwt-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: jwt-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for jwt-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7560a7f1de4f90de94ac645ee0303ac60c95b9e08e058fb69f6c330f71d71b11
MD5 6e6ec1072548464b8fe8979485ec521a
BLAKE2b-256 b98034e3fae850adb0b7b8b9b1cf02b2d975fcb68e0e8eb7d56d6b4fc23f7433

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.4.0 This release

2 files

1.3.1

1 file

1.3.0

2 files

1.2.0

2 files

1.1.0

2 files

1.0.0

1 file

0.6.1

1 file

0.6.0

1 file

0.5.4

4 files

0.5.3

4 files

0.5.2

4 files

0.5.1

4 files

0.5.0

0.3.2

1 file

0.3.1

1 file

0.2.3

2 files

0.2.1

2 files

0.1.1

2 files

0.0.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page