fix(server-nestjs/keycloak): refresh admin client token before it expires#2301
Conversation
|
🤖 Hey ! The security scan report for the current pull request is available here. |
shikanime
left a comment
There was a problem hiding this comment.
You can just use @nestjs/scheduler like the reconciler
|
Generally we also refresh using the already available access token https://github.com/keycloak/keycloak/tree/main/js/libs/keycloak-admin-client#keycloak-admin-client |
ff5bf21 to
bb6314e
Compare
|
🤖 Hey ! The security scan report for the current pull request is available here. |
|
Thanks for the review @shikanime — both points are addressed in bb6314e:
The spec was reworked accordingly: it drives the |
bb6314e to
a1744d2
Compare
|
🤖 Hey ! The security scan report for the current pull request is available here. |
9a0f97f to
f2c1021
Compare
|
🤖 Hey ! The security scan report for the current pull request is available here. |
StephaneTrebel
left a comment
There was a problem hiding this comment.
LGTM, avec des questions pour la suite
f2c1021 to
03d73c5
Compare
|
🤖 Hey ! The security scan report for the current pull request is available here. |
03d73c5 to
b52ab5c
Compare
|
🤖 Hey ! The security scan report for the current pull request is available here. |
|

0 New Issues
0 Fixed Issues
0 Accepted Issues
Issues liées
Issues numéro: N/A
Quel est le comportement actuel ?
Le client d'administration Keycloak s'authentifie une seule fois au démarrage du serveur (
onModuleInit) et ne rafraîchit jamais son access token. Le token expire après ~60 secondes (durée de vie par défaut dans Keycloak), donc tout appel à l'API admin effectué ensuite (par exempleensureProjectGroupslors de la réconciliation des groupes projet) échoue avec un 401, remonté par la librairie sous la forme d'une erreur opaque :Network response was not OK.Quel est le nouveau comportement ?
KeycloakClientServiceré-authentifie le client admin toutes les 58 secondes (juste en dessous de la durée de vie par défaut du token), via un intervalle démarré dansonModuleInitet nettoyé dansonModuleDestroy.master(où vit l'utilisateur admin) : la librairie résout l'endpoint de token à partir declient.realmName, qui est basculé vers le realm projet après le démarrage. Le realm projet est restauré après chaque authentification, y compris en cas d'échec.keycloak-client.service.spec.ts(7 tests) couvrant le cycle de vie : authentification initiale, rafraîchissement périodique, épinglage du realm, résilience aux échecs, arrêt à la destruction du module et absence de configuration.Cette PR introduit-elle un breaking change ?
Non. Aucun changement d'API ni de configuration. À noter : si la durée de vie de l'access token du realm
masterest configurée en dessous de 60 s sur une instance Keycloak, il faudra abaisserADMIN_TOKEN_REFRESH_INTERVAL_MSen conséquence.Autres informations
Cause racine confirmée dans le code de
@keycloak/keycloak-admin-client@24.0.5:auth()stocke le token une seule fois sans aucun mécanisme de rafraîchissement, et utiliserealmNamepour construire l'endpoint de token.