feat(backend): pose les primitives de sécurité
Couche pure, sans FastAPI ni session : rôles ordonnés, `Principal`, encodage et décodage des jetons d'accès, empreinte des jetons de rafraîchissement, et hachage Argon2id poussé dans un fil borné. Aucun de ces modules ne lit `get_settings()`, mis en cache par `lru_cache` et donc contaminé entre tests : les paramètres arrivent par `TokenPolicy` et par `build_hasher()`. Argon2id est calibré à m=19456 KiB, t=2, p=1, soit 17 ms mesurés sur un poste de développement.
This commit is contained in:
@@ -13,6 +13,9 @@ dependencies = [
|
||||
"alembic>=1.20.0",
|
||||
"prometheus-fastapi-instrumentator>=8.1.0",
|
||||
"python-json-logger>=4.2.0",
|
||||
"pyjwt>=2.10",
|
||||
"argon2-cffi>=23.1",
|
||||
"anyio>=4.0",
|
||||
]
|
||||
|
||||
[dependency-groups]
|
||||
@@ -57,7 +60,8 @@ select = [
|
||||
ignore = ["B008"]
|
||||
|
||||
[tool.ruff.lint.per-file-ignores]
|
||||
"tests/**/*.py" = ["S101"]
|
||||
# S105 et S106 signalent les secrets en dur, ce qui est justement la matière des tests d'auth.
|
||||
"tests/**/*.py" = ["S101", "S105", "S106"]
|
||||
|
||||
[tool.ruff.lint.isort]
|
||||
known-first-party = ["app"]
|
||||
|
||||
Reference in New Issue
Block a user