Skip to content

feature(server): authentication module

Laurent Bourgon requested to merge server/feature/auth into dev

Authentification à l'aide de JWT (JSON Web Token) par cookies.

En ce moment, le .env.dist suggère un jeton d'accès de 10 minutes et un jeton de rafraîchissement de 1 jour. L'utilisation d'une architecture à deux jetons permettra l'évolution du système d'authentification. Si jamais la possibilité de changer le mot de passe administrateur dynamiquement ou l'instauration d'un système de comptes sont ajoutées, il suffira d'ajouter le jeton de rafraîchissement dans la base de données.

Les cookies n'ont pas de Expires configuré. Cela les rend des « session cookies », c'est-à-dire, qu'ils vont être supprimés par le navigateur lorsque la fenêtre est fermée.

Ajouts

  • Module d'authentification AuthModule qui permet de protéger des routes et d'obtenir des jetons.
  • Contrôleur AuthController (/api/auth) qui permet de se connecter et de rafraîchir ses jetons.
  • Paquet @nest/jwt pour gérer l'encodage et le décodage des jetons.
  • Paquet cookie-parser pour gérer la lecture des cookies avec Express.
  • Nouveau module ConfigModule et service ConfigService qui encapsulent le module et le service de NestJS. Avec ce nouveau service, toutes les variables d'environnement sont obtenues à un seul endroit dans le code. Par exemple, configService.get<string>('DATABASE_URI') devient configService.databaseUri.

Modifications

  • Utilisation du nouveau service ConfigService partout.

Conséquences

  • Avec des cookies HTTP-Only, le code JavaScript du client ne peut pas accéder aux jetons. Un attaquant (ou un développeur) peut quand même mettre manuellement un jeton avec les outils développeurs.
  • Il faut utiliser le service ConfigService du projet, et non celui de NestJS.
Edited by Laurent Bourgon

Merge request reports

Loading