9c311cb58b
Auto Tag Develop / tag (push) Successful in 11s
## Probleme (ERP-98) Suite PHPUnit flaky ~1 run sur 2 -> hook pre-commit qui plante, recours au `--no-verify` sur des commits sains. ## Cause racine Une seule cause commune : l'horloge `CLOCK_REALTIME` du conteneur n'est pas monotone sous WSL2/Docker (saut arriere sous charge), alors que le code et les tests supposaient une horloge stable. - **401 « Invalid JWT Token »** : lexik validait `iat`/`nbf`/`exp` avec `clock_skew: 0` (`LooseValidAt(.., PT0S)` cote lcobucci). Un recul d'horloge apres `/login_check` rend le token « dans le futur » -> rejet. - **Horodatages « meme seconde »** (`1780402904 > 1780402904`) : colonnes `TIMESTAMP(0)` + `sleep(1)` reel. L'ecart floor-seconde n'est nul que si l'horloge recule. ## Correctifs | Fichier | Modif | |---|---| | `config/packages/lexik_jwt_authentication.yaml` | `clock_skew: 15` -> tolere la derive (benefice prod aussi) | | `TimestampableBlamableSubscriber` | injection `ClockInterface` (prod inchange via NativeClock) | | `CategoryTimestampableBlamableTest` | `ClockSensitiveTrait` + MockClock fige/avance, suppression des `sleep(1)` | | `TimestampableBlamableSubscriberTest` | MockClock injecte dans les 4 instanciations | **Subtilite** : `mockTime()` cree un MockClock en UTC ; les colonnes `TIMESTAMP WITHOUT TIME ZONE` round-trippent via le fuseau PHP (Europe/Paris) -> decalage 2h. Le mock est seede dans le fuseau par defaut (comme le NativeClock prod). ## Verifications - `make test` : **464 tests verts**, 0 echec / 0 erreur - Test timestamp cible : **5/5 deterministe** (et plus rapide, sleeps reels supprimes) - `make php-cs-fixer-allow-risky` : 0 fichier a corriger - Deprecations/notices PHPUnit preexistantes (hors perimetre) Pas de migration, pas de changement front, RBAC intact. --------- Co-authored-by: admin malio <malio@yuno.malio.fr> Co-authored-by: Matthieu <contact@malio.fr> Reviewed-on: #47 Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr> Co-committed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
34 lines
1.3 KiB
YAML
34 lines
1.3 KiB
YAML
lexik_jwt_authentication:
|
|
secret_key: '%env(resolve:JWT_SECRET_KEY)%'
|
|
public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
|
|
pass_phrase: '%env(JWT_PASSPHRASE)%'
|
|
token_ttl: '%env(int:JWT_TOKEN_TTL)%'
|
|
# Tolerance d'horloge (en secondes) appliquee a la validation des claims
|
|
# temporels iat / nbf / exp (LooseValidAt cote lcobucci). Sans cette marge
|
|
# (defaut 0), un recul d'horloge entre la signature (/login_check) et la
|
|
# requete suivante rend iat/nbf « dans le futur » -> « Invalid JWT Token »
|
|
# (401). Observe en dev sous WSL2/Docker (horloge CLOCK_REALTIME non
|
|
# monotone) : flakes intermittents de la suite PHPUnit (ERP-98). Benefice
|
|
# aussi en prod si les noeuds derivent legerement entre eux.
|
|
clock_skew: 15
|
|
remove_token_from_body_when_cookies_used: true
|
|
token_extractors:
|
|
authorization_header:
|
|
enabled: false
|
|
cookie:
|
|
enabled: true
|
|
name: BEARER
|
|
query_parameter:
|
|
enabled: false
|
|
set_cookies:
|
|
BEARER:
|
|
lifetime: '%env(int:JWT_COOKIE_TTL)%'
|
|
samesite: lax
|
|
path: /
|
|
secure: '%env(bool:JWT_COOKIE_SECURE)%'
|
|
httpOnly: true
|
|
api_platform:
|
|
check_path: /api/login_check
|
|
username_path: username
|
|
password_path: password
|