feature(server): authentication module
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 serviceConfigService
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')
devientconfigService.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