J'ai une API REST Node-Express où je peux faire une requête GET à un contrôleur d'utilisateur - /users/:id
- où :id
est le numéro d'identification de l'utilisateur stocké dans la base de données. J'ai également une application React-Redux côté client qui fait un appel à l'API. Pour effectuer la requête, l'application cliente doit avoir accès à l'identifiant de l'utilisateur, mais je ne suis pas sûr de la meilleure façon de stocker l'identifiant de l'utilisateur du côté client.
Pour plus de clarté, mon API envoie au client un fichier Jeton JWT lors de la connexion, qui contient l'identifiant de l'utilisateur ; l'application client enregistre le jeton dans le fichier localStorage
. Lorsque le client fait une demande, l'API vérifie que l'identifiant de l'utilisateur dans le jeton décodé correspond à l'identifiant contenu dans l'URL avant d'envoyer une réponse au client.
Je vois deux solutions possibles :
- Décoder le jeton JWT sur le client et utiliser l'identifiant de l'utilisateur stocké dans le jeton pour effectuer l'appel à l'API. Je pense qu'il s'agit d'un risque potentiel pour la sécurité, car je pense que je devrais stocker le secret sur l'application cliente. De plus, toute personne possédant le jeton peut accéder aux informations de l'utilisateur.
- L'API envoie l'identifiant de l'utilisateur lors de l'authentification, et le client le stocke dans le fichier
localStorage
. (Je ne pense pas que le stocker dans le magasin Redux fonctionnerait puisque l'utilisateur pourrait rafraîchir, effaçant l'état de l'identifiant utilisateur). J'ai l'impression que ce n'est pas la meilleure pratique, car je ne vois pas beaucoup d'autres applications côté client qui adoptent cette approche.
Laquelle des deux est la meilleure solution, ou existe-t-il une autre approche que je n'ai pas envisagée ?