Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

forge-mvc-mfa

Brique MFA (TOTP + codes de récupération) pour le framework Forge.

Statut : Beta — opt-in officiel publié sur PyPI depuis 1.0.0-beta.9

forge-mvc-mfa est marqué Development Status :: 4 - Beta (publication PyPI préparée par MFA-PYPI-READY-001).

Depuis SEC-MFA-SECRET-ENCRYPTION-001, le secret TOTP est chiffré au repos via Fernet (cryptography). La clé est lue depuis FORGE_MFA_SECRET_KEY, obligatoire au démarrage.

Le module est publié sur PyPI depuis 1.0.0-beta.9 (forme PEP 440 : 1.0.0b9). Il reste hors de forge-mvc[all] : l'installer directement, car l'activation de la MFA est un choix de sécurité explicite de l'application.

Installation :

pip install --pre forge-mvc-mfa

Pour développer le paquet en mode éditable depuis les sources du dépôt Forge :

git clone https://github.com/caucrogeGit/Forge.git
cd Forge
pip install -e .
pip install -r requirements-dev.txt

Configuration requise — FORGE_MFA_SECRET_KEY

forge-mvc-mfa chiffre les secrets TOTP au repos via Fernet et exige une clé valide dans l'environnement. Forge refuse explicitement les valeurs absentes, vides, ou placeholder (change-me, default, dev, secret, test, …) — voir MFA-SECRET-KEY-BOOT-VALIDATION-001.

# Générer une clé Fernet (à stocker dans .env ou un gestionnaire de secrets).
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

Ajouter dans .env :

FORGE_MFA_SECRET_KEY=<clé générée ci-dessus>

Ne JAMAIS commiter cette clé dans le dépôt. Utiliser .env, un gestionnaire de secrets (Vault, AWS Secrets Manager, etc.) ou les variables d'environnement du runtime de production.

Validation au démarrage

Pour échouer tôt en production plutôt qu'à la première opération MFA, appeler la validation explicite au boot de l'application :

from forge_mvc_mfa import validate_mfa_secret_key_config

# Au démarrage de l'application — par exemple dans app.py ou wsgi.py.
# Lève MfaSecretKeyMissing / MfaSecretKeyPlaceholder / MfaSecretInvalidKey
# avec un message d'erreur exploitable. Aucune valeur de clé n'est loguée.
validate_mfa_secret_key_config()

MFA reste opt-in : Forge ne force pas cette validation au niveau du core. C'est l'application qui choisit de l'appeler quand elle active MFA. Une application qui installe forge-mvc-mfa mais ne l'utilise pas n'est jamais bloquée.

Exceptions levées

Exception Cause
MfaSecretKeyMissing FORGE_MFA_SECRET_KEY absent ou vide
MfaSecretKeyPlaceholder valeur reconnue comme placeholder (change-me, etc.)
MfaSecretInvalidKey format Fernet invalide (longueur ou base64)

Aucune de ces exceptions ne contient la valeur de la clé tentée — pour éviter de fuir un secret dans un log applicatif. Le message indique toujours la commande de génération d'une clé valide.

Installation (mode source)

# Depuis le dépôt Forge (mode développement)
pip install -r requirements-dev.txt  # installe forge-mvc-mfa depuis packages/

forge-mvc-mfa dépend de pyotp>=2.9.

Utilisation

from forge_mvc_mfa import (
    AuthMfaFactor,
    create_totp_factor,
    confirm_totp_factor,
    verify_mfa_challenge,
    is_mfa_enabled,
)

L'API complète est exposée directement depuis forge_mvc_mfa. Les fonctions privées (_persist_session_changes, _session_user_matches) doivent être importées depuis forge_mvc_mfa.mfa.

SQL

Les tables MFA (auth_mfa_factors, auth_mfa_recovery_codes) sont générées dans votre projet par la commande du core forge auth:init, puis appliquées avec forge db:apply. Les fichiers sql/ du dépôt source en sont la référence (ils ne sont pas livrés dans le wheel : la DDL est embarquée par auth:init).

Compatibilité

Disponible séparément depuis Forge 2.4.0 (ADR-004, MFA-EXTRACT-001). Les anciens chemins core.auth.mfa, core.auth.recovery et core.auth.totp_replay ont été retirés en Forge 3.0.

Limites connues

  • Le store anti-replay et le rate-limit sont in-memory process-local. En multi-worker, utiliser des sticky sessions.
  • La politique de rotation et la procédure de sauvegarde/restauration de la clé Fernet ne sont pas encore formalisées (exigences Beta restantes).

Release files for forge-mvc-mfa 1.0.0rc3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for forge-mvc-mfa 1.0.0rc3
File Size Uploaded
forge_mvc_mfa-1.0.0rc3.tar.gz 21.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for forge-mvc-mfa 1.0.0rc3
File Interpreter ABI Platform
forge_mvc_mfa-1.0.0rc3-py3-none-any.whl Python 3 none any Details

Total release size: 41.2 kB

Release files / forge_mvc_mfa-1.0.0rc3.tar.gz

Download URL forge_mvc_mfa-1.0.0rc3.tar.gz
Size 21.2 kB
Tags Source
SHA-256 checksum
How to use checksums
1df5a7bc8dad992f97f78f05a2d7dc37ab4f58a8367303aeabf781a0772dca92
BLAKE2b-256 checksum
How to use checksums
f004a13e5c8cb9d4aedae927b7e311b6b7b55f4d5c1bfae7d2fbbcce04b7080f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / forge_mvc_mfa-1.0.0rc3-py3-none-any.whl

Download URL forge_mvc_mfa-1.0.0rc3-py3-none-any.whl
Size 20.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3ee9c6103cec6cab1e82af1e7e630080b100f644d994c71c8f38b421fceacb08
BLAKE2b-256 checksum
How to use checksums
28c3bc0d277e60c4fb8ece6703a689522096a583f2ba4e425f1632543a718757
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page