dfd6e5251d
La suite echouait de facon intermittente (~1 run sur 2), faisant planter le hook pre-commit. Cause racine unique : 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. - JWT « Invalid JWT Token » (401) : lexik validait iat/nbf/exp avec clock_skew=0 (LooseValidAt PT0S). Un recul d'horloge apres /login_check rendait le token « dans le futur ». Ajout de clock_skew: 15 (benefice prod aussi si les noeuds derivent). - Horodatages « meme seconde » : colonnes TIMESTAMP(0) + sleep(1) reel. L'ecart floor-seconde n'etait nul que si l'horloge reculait. Le subscriber injecte desormais ClockInterface (comportement prod inchange via NativeClock) et les tests pilotent un MockClock fige/avance (ClockSensitiveTrait), sans sleep reel -> deterministe et plus rapide. Le mock est seede dans le fuseau PHP par defaut pour eviter le decalage UTC <-> Europe/Paris au round-trip des colonnes TIMESTAMP WITHOUT TIME ZONE. make test : 464 tests verts ; test timestamp 5/5 deterministe.
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
|