Skip to main content

This is a FastAPI wrapper

Project description

fastapi-auth-wrapper

A lightweight, plug-and-play authentication wrapper for FastAPI applications that delegate authorization to an external service.

This package allows your FastAPI app to accept incoming requests with an Authorization header, forward the token to a remote authentication service (e.g., a Java backend), and inject a validated user object directly into your route handlers.


✨ Features

  • 🔌 Simple dependency injection (AuthorizedUserClient)
  • 🔐 External token validation (supports microservices architecture)
  • ⚡ Minimal configuration via environment variables
  • 🧩 Clean separation of concerns (FastAPI app vs auth service)
  • 👤 Direct access to authenticated user (client.user)

📦 Installation

pip install fastapi-auth-wrapper

⚙️ Configuration

Set the following environment variables in your application:

AUTH_SERVICE_URL=http://127.0.0.1:8002
AUTH_SERVICE_TOKEN_URL=/auth/user

Explanation

Variable Description
AUTH_SERVICE_URL Base URL of your authentication service
AUTH_SERVICE_TOKEN_URL Endpoint path used to validate tokens (must be POST)

The final request URL will be: AUTH_SERVICE_URL + AUTH_SERVICE_TOKEN_URL


🚀 Quick Start

1. Import the client

from fastapi import FastAPI
from fastapi_auth_wrapper import AuthorizedUserClient

2. Use in your route

app = FastAPI()

@app.get("/check")
async def get_status(client: AuthorizedUserClient):
    print(client.user)
    return {"status": "ok"}

That’s it. The user will be automatically validated and injected.


🔄 How It Works

  1. Incoming request contains:

    Authorization: Bearer <token>
    
  2. The wrapper:

    • Extracts the token

    • Sends a POST request to:

      AUTH_SERVICE_URL + AUTH_SERVICE_TOKEN_URL
      
    • Passes the token for validation

  3. Auth service responds with user data

  4. The wrapper:

    • Parses the response
    • Attaches it to client.user
    • Injects AuthorizedUserClient into your route

👤 Accessing the Authenticated User

Inside any route where AuthorizedUserClient is injected:

@app.get("/profile")
async def profile(client: AuthorizedUserClient):
    user = client.user
    return {
        "user_id": user.get("id"),
        "email": user.get("email")
    }

client.user contains the exact user object returned by your auth service.


🧪 Example Request

GET http://127.0.0.1:8001/check
Content-Type: application/json
Accept: application/json
Authorization: Bearer <your-token>

🧾 Expected Auth Service Behavior

Your external auth service must:

  • Accept a POST request
  • Receive the token (typically via header or body)
  • Validate the token
  • Return a JSON response containing user information

Example Response

{
  "id": "1",
  "email": "user@example.com",
  "roles": ["user"]
}

⚠️ Error Handling

The wrapper will raise appropriate HTTP errors in cases such as:

  • Missing Authorization header
  • Invalid token format
  • Auth service unavailable
  • Token validation failure

You can customize error handling globally in your FastAPI app if needed.


🧩 Use Cases

  • Microservices with centralized authentication
  • FastAPI frontend backed by Java/Spring auth service
  • API gateways needing token verification
  • Multi-client architectures sharing auth

🛠 Advanced Usage

Custom logic using user data

@app.get("/admin")
async def admin_only(client: AuthorizedUserClient):
    if "admin" not in client.user.get("roles", []):
        raise HTTPException(status_code=403, detail="Forbidden")
    return {"message": "Welcome admin"}

🧠 Design Philosophy

  • Keep FastAPI apps lightweight
  • Delegate authentication responsibility
  • Promote reusable infrastructure components

📄 License

MIT License


🙌 Contributing

Contributions, issues, and feature requests are welcome!


📬 Support

If you encounter any issues, feel free to open a GitHub issue or reach out.

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_auth_wrapper-0.1.1.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

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

fastapi_auth_wrapper-0.1.1-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_auth_wrapper-0.1.1.tar.gz.

File metadata

  • Download URL: fastapi_auth_wrapper-0.1.1.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for fastapi_auth_wrapper-0.1.1.tar.gz
Algorithm Hash digest
SHA256 923a9539322b91732fa3e5dc2e6c55f49ddbc4609efda6d11f6d11fdb51cd3cd
MD5 fd847a4b71100f82439d695c82683b67
BLAKE2b-256 719aec70edf3c9c1004e740a5028d41ad45baad5f2400921a9af6f101eac31e3

See more details on using hashes here.

File details

Details for the file fastapi_auth_wrapper-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_auth_wrapper-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 559b19664cc8017bf8a5c8be6888de8ba1a17f2f606e672d39e2965f7aae5e41
MD5 2ee1d29005196933c3715b048a941fe5
BLAKE2b-256 a61476568585dd17f5992192e14b903a4d6e12a131e7ad0287ce278b37ca049c

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