FastAPI SDK
get401-fastapi wraps get401-core into clean, type-safe FastAPI dependencies for authentication, role-based access, and scope enforcement.
GitHub: get401/python-fastapi
Installation
pip install get401-fastapiSetup
Create a single Get401Auth instance and reuse it across your application:
# auth.py
from get401_fastapi import Get401Auth
auth = Get401Auth(
app_id="your-app-id",
origin="https://yourapp.com",
)Protecting Routes
Require authentication
from fastapi import FastAPI, Depends
from get401_core import TokenClaims
from .auth import auth
app = FastAPI()
@app.get("/me")
async def me(claims: TokenClaims = Depends(auth.require())):
return {"user_id": claims.sub, "roles": claims.roles}Require roles
# At least one role (default)
@app.get("/dashboard")
async def dashboard(claims: TokenClaims = Depends(auth.require_roles(["USER"]))):
return {"user_id": claims.sub}
# All roles must be present
@app.delete("/admin/user/{user_id}")
async def delete_user(
user_id: str,
claims: TokenClaims = Depends(auth.require_roles(["ADMIN", "SUPERUSER"], require_all=True)),
):
...Require scope
@app.post("/reports/export")
async def export_report(claims: TokenClaims = Depends(auth.require_scope("reports:export"))):
...Optional authentication
Returns None for unauthenticated requests instead of raising 401:
from typing import Optional
@app.get("/feed")
async def feed(claims: Optional[TokenClaims] = Depends(auth.optional())):
if claims:
return personalized_feed(claims.sub)
return public_feed()Dependency Reference
| Method | Returns | Description |
|---|---|---|
auth.require() |
TokenClaims |
Valid token required - raises 401 otherwise |
auth.optional() |
Optional[TokenClaims] |
Returns claims or None - never raises |
auth.require_roles(roles, require_all=False) |
TokenClaims |
Valid token + role check - raises 403 on mismatch |
auth.require_scope(scope) |
TokenClaims |
Valid token + scope check - raises 403 on mismatch |
HTTP Responses
| Situation | Status |
|---|---|
Missing aact cookie |
401 |
| Expired token | 401 |
| Invalid / tampered token | 401 |
| Missing role or scope | 403 |
| get401 backend unreachable | 503 |