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
-
Incoming request contains:
Authorization: Bearer <token> -
The wrapper:
-
Extracts the token
-
Sends a POST request to:
AUTH_SERVICE_URL + AUTH_SERVICE_TOKEN_URL -
Passes the token for validation
-
-
Auth service responds with user data
-
The wrapper:
- Parses the response
- Attaches it to
client.user - Injects
AuthorizedUserClientinto 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.usercontains 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
Authorizationheader - 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
🙌 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94c11ef056a0867615ffc5678a91245037fec0e68349ec4c63dad926e8d6276e
|
|
| MD5 |
df06cd97cbe9345a132ff9ffc91f4cd3
|
|
| BLAKE2b-256 |
ff7e41c6f25fd93ab61c3dbcb4682646b866cac796fdff2f55461999db91b795
|
File details
Details for the file fastapi_auth_wrapper-0.1.3-py3-none-any.whl.
File metadata
- Download URL: fastapi_auth_wrapper-0.1.3-py3-none-any.whl
- Upload date:
- Size: 8.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6d5daa98325285542ed7afc8238ba3092c2064560c2ff233fb1f37f3a9ed24a
|
|
| MD5 |
f66dfd3fe7860bfbbab9187e7c146058
|
|
| BLAKE2b-256 |
1365970cfe7f61d0d75acfd18f6eb366a703109fb2fed4bac54537a85932ca0e
|