Skip to main content

Simple library for using a third party authentication service like Keycloak or Auth0 with FastAPI

Project description

FastAPI Third Party Auth

Test Documentation Status Package version


Documentation: https://fastapi-third-party-auth.readthedocs.io/

Source Code: https://github.com/aiwizo/fastapi-third-party-auth


Simple library for using a third party authentication service with FastAPI. Verifies and decrypts 3rd party OpenID Connect tokens to protect your endpoints.

Easily used with authentication services such as:

FastAPI's generated interactive documentation supports the grant flows:

GrantType.AUTHORIZATION_CODE
GrantType.IMPLICIT
GrantType.PASSWORD
GrantType.CLIENT_CREDENTIALS

example documentation

Installation

poetry add fastapi-third-party-auth

Or, for the old-timers:

pip install fastapi-third-party-auth

Usage

See this example for how to use docker-compose to set up authentication with fastapi-third-party-auth + Keycloak.

Standard usage

from fastapi import Depends
from fastapi import FastAPI
from fastapi import Security
from fastapi import status

from fastapi_third_party_auth import Auth
from fastapi_third_party_auth import GrantType
from fastapi_third_party_auth import KeycloakIDToken

auth = Auth(
    openid_connect_url="http://localhost:8080/auth/realms/my-realm/.well-known/openid-configuration",
    issuer="http://localhost:8080/auth/realms/my-realm",  # optional, verification only
    client_id="my-client",  # optional, verification only
    scopes=["email"],  # optional, verification only
    grant_types=[GrantType.IMPLICIT],  # optional, docs only
    idtoken_model=KeycloakIDToken,  # optional, verification only
)

app = FastAPI(
    title="Example",
    version="dev",
    dependencies=[Depends(auth)],
)

@app.get("/protected")
def protected(id_token: KeycloakIDToken = Security(auth.required)):
    return dict(message=f"You are {id_token.email}")

Optional: Custom token validation

The IDToken class will accept any number of extra fields but you can also validate fields in the token like this:

class MyAuthenticatedUser(IDToken):
    custom_field: str
    custom_default: float = 3.14

auth = Auth(
    ...,
    idtoken_model=MyAuthenticatedUser,
)

Project details


Download files

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

Source Distribution

fastapi-third-party-auth-0.1.2.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

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

fastapi_third_party_auth-0.1.2-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file fastapi-third-party-auth-0.1.2.tar.gz.

File metadata

  • Download URL: fastapi-third-party-auth-0.1.2.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.9.14 Linux/5.15.0-1020-azure

File hashes

Hashes for fastapi-third-party-auth-0.1.2.tar.gz
Algorithm Hash digest
SHA256 01afc17ca5c6b0a80782805aa5cfdedbae3b26db52d47e1a5d87a50e9e1ae44a
MD5 3c2205504880700d194429a305442e30
BLAKE2b-256 8ccbed450b4e58bd9c406e79f6b5444c990e73b2520586079cfb3f5b39304cb7

See more details on using hashes here.

File details

Details for the file fastapi_third_party_auth-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_third_party_auth-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7f8c1828615b1672c60a92dd74d1d7af4bdbe6fa8e5601da135ca9e75e987042
MD5 f41067bceeb4b31831a3f9a6834946c2
BLAKE2b-256 62112e374b0c6c14047281ec37dd1f9cedc98158a5e700b974e097340412d0c0

See more details on using hashes here.

Supported by

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