Skip to main content

Auth0 server-side Python SDK

Project description

The Auth0 Server Python SDK is a library for implementing user authentication in Python applications.

PyPI Downloads License Ask DeepWiki

📚 Documentation - 🚀 Getting Started - 💬 Feedback

Documentation

  • Examples - examples for your different use cases.
  • Docs Site - explore our docs site and learn more about Auth0.

Getting Started

1. Install the SDK

pip install auth0-server-python

If you’re using Poetry:

poetry install auth0-server-python

2. Create the Auth0 SDK client

Create an instance of the Auth0 client. This instance will be imported and used in anywhere we need access to the authentication methods.

from auth0_server_python.auth_server.server_client import ServerClient

auth0 = ServerClient(
    domain='<AUTH0_DOMAIN>',
    client_id='<AUTH0_CLIENT_ID>',
    client_secret='<AUTH0_CLIENT_SECRET>',
    secret='<AUTH0_SECRET>',
    authorization_params= {
      redirect_uri: '<AUTH0_REDIRECT_URI>',
    }
)

The AUTH0_DOMAIN, AUTH0_CLIENT_ID, and AUTH0_CLIENT_SECRET can be obtained from the Auth0 Dashboard once you've created an application. This application must be a Regular Web Application.

The AUTH0_REDIRECT_URI tells Auth0 what URL to use while redirecting the user back after successful authentication, e.g. http://localhost:3000/auth/callback. Note: your application needs to handle this endpoint and call the SDK's complete_interactive_login(url: string) to finish the authentication process. See below for more information.

The AUTH0_SECRET is the key used to encrypt the session and transaction cookies. You can generate a secret using openssl:

openssl rand -hex 64

3. Add login to your Application (interactive)

Before using redirect-based login, ensure the redirect_uri is configured when initializing the SDK:

auth0 = ServerClient(
    # ...
    redirect_uri='<AUTH0_REDIRECT_URI>',
    # ...
)

[!IMPORTANT]
You will need to register the AUTH0_REDIRECT_URI in your Auth0 Application as an Allowed Callback URLs via the Auth0 Dashboard.

In order to add login to any application, call start_interactive_login(), and redirect the user to the returned URL.

The implementation will vary based on the framework being used, but here is an example of what this would look like in FastAPI:

from fastapi import FastAPI, Request, Response
from starlette.responses import RedirectResponse

app = FastAPI()


@app.get("/auth/login")
async def login(request: Request):
    authorization_url = await auth0.start_interactive_login()
    return RedirectResponse(url=authorization_url)

Once the user has successfully authenticated, Auth0 will redirect the user back to the provided redirect_uri which needs to be handled in the application.

This implementation will also vary based on the framework used, but what needs to happen is:

  • register an endpoint that will handle the configured redirect_uri.
  • call the SDK's complete_interactive_login(url), passing it the full URL, including query parameters.

Here is an example of what this would look like in FastAPI, with redirect_uri configured as http://localhost:3000/auth/callback:

@app.get("/auth/callback")
async def callback(request: Request):
    result = await auth0.complete_interactive_login(str(request.url))
    # Store session or set cookies as needed
    return RedirectResponse(url="/")

4. Login with Custom Token Exchange

If you're migrating from a legacy authentication system or integrating with a custom identity provider, you can exchange external tokens for Auth0 tokens using the OAuth 2.0 Token Exchange specification (RFC 8693):

from auth0_server_python.auth_types import LoginWithCustomTokenExchangeOptions

# Exchange a custom token and establish a session
result = await auth0.login_with_custom_token_exchange(
    LoginWithCustomTokenExchangeOptions(
        subject_token="your-custom-token",
        subject_token_type="urn:acme:mcp-token",
        audience="https://api.example.com"
    ),
    store_options={"request": request, "response": response}
)

# Access the user session
user = result.state_data["user"]

For advanced token exchange scenarios (without creating a session), use custom_token_exchange() directly:

from auth0_server_python.auth_types import CustomTokenExchangeOptions

# Exchange a custom token for Auth0 tokens
response = await auth0.custom_token_exchange(
    CustomTokenExchangeOptions(
        subject_token="your-custom-token",
        subject_token_type="urn:acme:mcp-token",
        audience="https://api.example.com",
        scope="read:data write:data"
    )
)

print(response.access_token)

For more details and examples, see examples/CustomTokenExchange.md.

5. Multiple Custom Domains (MCD)

For applications that use multiple custom domains on the same Auth0 tenant, pass a domain resolver function instead of a static domain string:

from auth0_server_python.auth_server.server_client import ServerClient
from auth0_server_python.auth_types import DomainResolverContext

async def domain_resolver(context: DomainResolverContext) -> str:
    host = context.request_headers.get('host', '').split(':')[0]
    domain_map = {
        "acme.yourapp.com": "acme.auth0.com",
        "globex.yourapp.com": "globex.auth0.com",
    }
    return domain_map.get(host, "default.auth0.com")

auth0 = ServerClient(
    domain=domain_resolver,  # Callable enables MCD mode
    client_id='<AUTH0_CLIENT_ID>',
    client_secret='<AUTH0_CLIENT_SECRET>',
    secret='<AUTH0_SECRET>',
)

The SDK handles per-domain OIDC discovery, JWKS fetching, issuer validation, and session isolation automatically. Static string domains continue to work unchanged.

For more details and examples, see examples/MultipleCustomDomains.md.

Feedback

Contributing

We appreciate feedback and contribution to this repo! Before you get started, please read the following:

Raise an issue

To provide feedback or report a bug, please raise an issue on our issue tracker.

Vulnerability Reporting

Please do not report security vulnerabilities on the public GitHub issue tracker. The Responsible Disclosure Program details the procedure for disclosing security issues.

What is Auth0?

Auth0 Logo

Auth0 is an easy to implement, adaptable authentication and authorization platform. To learn more checkout Why Auth0?

This project is licensed under the MIT license. See the LICENSE file for more info.

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

auth0_server_python-1.0.0b9.tar.gz (51.0 kB view details)

Uploaded Source

Built Distribution

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

auth0_server_python-1.0.0b9-py3-none-any.whl (54.9 kB view details)

Uploaded Python 3

File details

Details for the file auth0_server_python-1.0.0b9.tar.gz.

File metadata

  • Download URL: auth0_server_python-1.0.0b9.tar.gz
  • Upload date:
  • Size: 51.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for auth0_server_python-1.0.0b9.tar.gz
Algorithm Hash digest
SHA256 47bd2a1036eddd11ec66267fffd0e551443161d613d1ccbc614ba6e5e742dfaf
MD5 6ef40f0d15d346cd8f834e8427e3ec0f
BLAKE2b-256 f70b775c025f2686f81648715eff2a1013c55141a576d9d56bdd0b21ea66c809

See more details on using hashes here.

Provenance

The following attestation bundles were made for auth0_server_python-1.0.0b9.tar.gz:

Publisher: publish.yml on auth0/auth0-server-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file auth0_server_python-1.0.0b9-py3-none-any.whl.

File metadata

File hashes

Hashes for auth0_server_python-1.0.0b9-py3-none-any.whl
Algorithm Hash digest
SHA256 23afbd9260582ac6972f78f9c6f027b62873edf5096e324bb7704c9c114cc7f5
MD5 ac2a8587c83fcdf5c005aa144d5cdc8b
BLAKE2b-256 104fa13224d55efd5d45eb082426a2b439dfd08fbde7068a2e04e7cc9ecfec88

See more details on using hashes here.

Provenance

The following attestation bundles were made for auth0_server_python-1.0.0b9-py3-none-any.whl:

Publisher: publish.yml on auth0/auth0-server-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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