FastAPI 2-Factor Authentication Middleware
Project description
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.
Documentation
📚 Full Documentation - Comprehensive technical documentation and API reference
Features
- 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
Installation
To install two-fast-auth, use pip:
pip install two-fast-auth
Basic Usage
from 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"}
Configuration Options
TwoFactorAuth Parameters
| 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 |
TwoFactorMiddleware Parameters
| 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 |
Advanced Configuration
# 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"]
)
Contributing
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
License
MIT License - See LICENSE for details
Author
Renzo Franceschini
Acknowledgements
Project details
Release history Release notifications | RSS feed
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 two-fast-auth-1.1.0.tar.gz.
File metadata
- Download URL: two-fast-auth-1.1.0.tar.gz
- Upload date:
- Size: 6.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66f50ea01c64a005738d0f39f741129f6da277c0dbb84594141e3bdbbe4bb24c
|
|
| MD5 |
2710f2235c408fde13b06f4a3781b2b9
|
|
| BLAKE2b-256 |
d971a4786fb18d65f8ba590a28d080c69de54dd6435bf5a75333f0a13e8a7aed
|
File details
Details for the file two_fast_auth-1.1.0-py3-none-any.whl.
File metadata
- Download URL: two_fast_auth-1.1.0-py3-none-any.whl
- Upload date:
- Size: 6.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9080eb619bc03e703eac5e4f4b1b04d6bc4f42aa536bead05ed4618c1e7fb00
|
|
| MD5 |
5a6f15616b4a96684cdcd97c4ca0bd6f
|
|
| BLAKE2b-256 |
67153557b4ac8ebf4773bcc58c1cb95f2e1e727990dcab473728018cb68d6c19
|