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.3.tar.gz (8.5 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.3-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fastapi_auth_wrapper-0.1.3.tar.gz
  • Upload date:
  • Size: 8.5 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.3.tar.gz
Algorithm Hash digest
SHA256 94c11ef056a0867615ffc5678a91245037fec0e68349ec4c63dad926e8d6276e
MD5 df06cd97cbe9345a132ff9ffc91f4cd3
BLAKE2b-256 ff7e41c6f25fd93ab61c3dbcb4682646b866cac796fdff2f55461999db91b795

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastapi_auth_wrapper-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b6d5daa98325285542ed7afc8238ba3092c2064560c2ff233fb1f37f3a9ed24a
MD5 f66dfd3fe7860bfbbab9187e7c146058
BLAKE2b-256 1365970cfe7f61d0d75acfd18f6eb366a703109fb2fed4bac54537a85932ca0e

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