[FEATURE] Rendre le refresh token stateless (PIX-24119) - #17422
Conversation
|
Choisir les applications à déployer :
Important N'oubliez pas de déployer l'API pour pouvoir accéder aux fronts et/ou à l’API MaDDo. |
| /** | ||
| * @param {string} value | ||
| */ | ||
| static isRefreshToken(value) { |
There was a problem hiding this comment.
Serait-il possible de renommer isRefreshToken→isStatefulRefreshToken ? Il me semble que cela indiquerait mieux que cette méthode permet de différencier les 2 types de refresh tokens.
| static isRefreshToken(value) { | |
| static isStatefulRefreshToken(value) { |
There was a problem hiding this comment.
Serait-il possible de marquer la classe RefreshToken (et/ou son constructeur) comme @deprecated ?
| import { validateEntity } from '../../../shared/domain/validators/entity-validator.js'; | ||
|
|
||
| export class UserRefreshToken { | ||
| constructor({ userId, audience, sessionId, source }) { |
There was a problem hiding this comment.
Suggestion : dans tout ce fichier, par considération d’organisation et de facilité de compréhension du code, veiller à ordonner comme suit les propriétés :
userId(c’est le plus important)sessionId(ça va avec leuserId)audience(c’est une problématique sécurité réseau, et donc sur un autre plan queuserIdetsessionId)source(c’est une donnée sans utilité et que nous voulons supprimer depuis longtemps)
| constructor({ userId, audience, sessionId, source }) { | |
| constructor({ userId, sessionId, audience, source }) { |
| } | ||
|
|
||
| static generate({ userId, source, audience, sessionId }) { | ||
| const expirationDelaySeconds = config.authentication.refreshTokenLifespanMs / 1000; |
There was a problem hiding this comment.
Est-ce qu’on pourrait définir cette variable à la racine du module pour ne pas la déclarer et la calculer à chaque appel de la méthode ?
| } | ||
|
|
||
| hasSameAudience(audience) { | ||
| return this.audience === audience; |
There was a problem hiding this comment.
Je sais que ce code provient de l’ancienne classe dépréciée RefreshToken, mais serait-il possible d’en profiter pour ne pas reproduire cette yoda condition :
| return this.audience === audience; | |
| return audience === this.audience; |
☀️ Problème
Actuellement le refresh token est stateful, ses informations sont stockées dans Redis.
On souhaite rendre le refresh token stateless.
⛱️ Proposition
Utiliser un refresh token au format JWT.
🧴 Remarques
Cette fonctionnalité est derrière le feature toggle
isSessionLogoutEnabled.🏊 Pour tester
Le feature toggle est actif sur la RA.
La durée de vie de l’access token est descendue à 1 minute sur la RA.
Vérifier qu’il n’y a pas de régression avec le feature toggle inactif.
Vérifier qu’un refresh token créé avec le feature toggle inactif est toujours utilisable après activation du feature toggle.