Skip to main content

Python Auth0 JWT Validator

Project description

Python Auth0 JWT Validator

Docs Tests


Documentation: https://immersa-co.github.io/python-auth0-jwt-validator

Source Code: https://github.com/immersa-co/python-auth0-jwt-validator


Getting Started

The package is framework agnostic, so we need to implement it on each framework since each framework handles the requests and responses in different ways.

Requirements

  • Python 3.8+

Installation

From PyPi

pip install auth0-jwt-validator

Examples

Flask Example

from functools import wraps

from flask import Flask, request, jsonify
from auth0_jwt_validator import (
    get_token,
    AccessTokenVerifier,
    MissingClaimError,
    InvalidClaimError,
)

app = Flask(__name__)

auth0_jwks_uri = "https://<auth0-tenant>.us.auth0.com/.well-known/jwks.json"
issuer = "https://<auth0-tenant>.us.auth0.com/"
audience = "https://<auth0-tenant>.us.auth0.com/api/v2/"
access_token_verifier = AccessTokenVerifier(auth0_jwks_uri, issuer, audience)


@app.errorhandler(MissingClaimError)
def missing_claim_error_handler(e: MissingClaimError):
    return e.description, 401


@app.errorhandler(InvalidClaimError)
def missing_claim_error_handler(e: InvalidClaimError):
    return e.description, 401


def get_bearer_token(authorization: str | None) -> str | None:
    return get_token(authorization)


def get_access_token_payload(bearer_token: str | None) -> dict:
    return access_token_verifier.verify(bearer_token)


def route_get_access_token_payload(f):
    @wraps(f)
    def _route_get_access_token_payload(*args, **kwargs):
        authorization = request.headers.get("authorization")
        bearer_token = get_bearer_token(authorization)
        access_token_payload = get_access_token_payload(bearer_token)
        return f(*args, **kwargs, access_token_payload=access_token_payload)

    return _route_get_access_token_payload


@app.get("/")
@route_get_access_token_payload
def index(access_token_payload: dict):
    return jsonify({"access_token_payload": access_token_payload})

Fast API Example

from fastapi import FastAPI, Header, Request, HTTPException, Depends
from fastapi.exception_handlers import http_exception_handler
from auth0_jwt_validator import (
    get_token,
    AccessTokenVerifier,
    MissingClaimError,
    InvalidClaimError,
)

app = FastAPI()

auth0_jwks_uri = "https://<auth0-tenant>.us.auth0.com/.well-known/jwks.json"
issuer = "https://<auth0-tenant>.us.auth0.com/"
audience = "https://<auth0-tenant>.us.auth0.com/api/v2/"
access_token_verifier = AccessTokenVerifier(auth0_jwks_uri, issuer, audience)


@app.exception_handler(MissingClaimError)
def missing_claim_error_handler(request: Request, exc: MissingClaimError):
    return await http_exception_handler(
        request, HTTPException(status_code=401, detail=exc.description)
    )


@app.exception_handler(InvalidClaimError)
def missing_claim_error_handler(request: Request, exc: InvalidClaimError):
    return await http_exception_handler(
        request, HTTPException(status_code=401, detail=exc.description)
    )


async def get_bearer_token(
    authorization: str | None = Header(default=None),
) -> str | None:
    return get_token(authorization)


async def get_access_token_payload(
    bearer_token: str | None = Depends(get_bearer_token),
) -> dict:
    return access_token_verifier.verify(bearer_token)


@app.get("/")
async def index(access_token_payload: dict = Depends(get_access_token_payload)):
    return {"access_token_payload": access_token_payload}

Download files

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

Source Distribution

auth0-jwt-validator-1.2.tar.gz (122.6 kB view details)

Uploaded Source

Built Distribution

auth0_jwt_validator-1.2-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file auth0-jwt-validator-1.2.tar.gz.

File metadata

  • Download URL: auth0-jwt-validator-1.2.tar.gz
  • Upload date:
  • Size: 122.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for auth0-jwt-validator-1.2.tar.gz
Algorithm Hash digest
SHA256 4ff9d9499b9770d68fe4be6e22da5ee74e62f4f6f0052e894ab09fb027f69220
MD5 550dc3ed88113e5bdec24ede45a16d39
BLAKE2b-256 bb97cbce8accf11caee49d0df8a405f5422dab06b552267dc8c1ca2376844c3c

See more details on using hashes here.

File details

Details for the file auth0_jwt_validator-1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for auth0_jwt_validator-1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ba9433b41841e5e74228542f00c6a0752e86cbcd74dd237ce7de92205372e52a
MD5 06587c65acc1cb08350bdfa26918c960
BLAKE2b-256 3709a70da2ec436b34a3818c9cd0d11168cf37939a58071a0e037db2cfac0e87

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page