two-fast-auth is a FastAPI middleware that provides seamless two-factor authentication implementation. It integrates with FastAPI to offer robust 2FA protection for your application routes.
📚 Full Documentation - Comprehensive technical documentation and API reference
- QR Code Generation: Automatic QR code creation for authenticator apps
- TOTP Verification: Time-based one-time password validation
- Recovery Codes: Secure recovery code generation and management
- Optional Secret Encryption: Securely store and verify 2FA secrets
- Middleware Integration: Easy integration with FastAPI routes
To install two-fast-auth, use pip:
pip install two-fast-authfrom fastapi import FastAPI from two_fast_auth import TwoFactorMiddleware, TwoFactorAuth app = FastAPI() async def get_user_secret(user_id: str) -> str: # Implement your logic to retrieve user's secret from database return "user_stored_secret" # Replace with actual DB lookup app.add_middleware( TwoFactorMiddleware, get_user_secret_callback=get_user_secret, excluded_paths=["/docs", "/redoc"], header_name="X-2FA-Code", encryption_key="your-key-here" # Optional ) @app.get("/protected-route") async def protected_route(): return {"message": "2FA protected content"}| Parameter | Default | Description |
|---|---|---|
secret | Auto-generated | Base32 secret for TOTP generation |
qr_fill_color | "black" | QR code foreground color |
qr_back_color | "white" | QR code background color |
issuer_name | "2FastAuth" | Name displayed in authenticator apps |
| Parameter | Default | Description |
|---|---|---|
encryption_key | None | Encryption key for securing 2FA secrets (Fernet-compatible key) |
excluded_paths | ["/login", "/setup-2fa"] | Paths that bypass 2FA verification |
header_name | "X-2FA-Code" | Request header containing 2FA verification code |
# Generate and encrypt secret secret = TwoFactorAuth().secret encrypted_secret = TwoFactorAuth.encrypt_secret( secret, encryption_key="your-key-here" ) # Store encrypted secret in database async def get_user_secret(user_id: str) -> str: return await fetch_encrypted_secret_from_db(user_id) # Middleware with encrypted secrets app.add_middleware( TwoFactorMiddleware, get_user_secret_callback=get_user_secret, encryption_key="your-key-here", excluded_paths=["/healthcheck"] )Contributions are welcome! Please open an issue or submit a pull request on GitHub.
MIT License - See LICENSE for details
Renzo Franceschini