Je recherche une solution efficace et optimale pour sécuriser plusieurs microservices qui communiquent via REST avec une application Web Client.
Configuration actuelle:
Ces microservices sont réalisés en Java, avec Spring Framework et s'exécutent dans des conteneurs Docker.
Le client est une application Angular 2.
J'ai créé un nouveau µService qui fera office de "passerelle} _" et sera le seul point de communication entre mon client Web et mes autres services.
Je récupère un jeton crypté JWT à partir d'une API d'authentification à distance (appelons-le LOCK)
Solution à laquelle je pensais:
Je pourrais stocker le login JWT dans un cookie et l'envoyer à la passerelle.
La passerelle est intégrée au contenu final envoyé au µService concerné et stocke l'utilisateur s'il est nouveau dans une base de données.
Le microservice récupère alors la requête, vérifie dans le service d'authentification distant le rôle d'utilisateur et, s'il est suffisant, renvoie un statut 200 avec résultat.
Modifier
Nous aurons besoin d’un courtier RabbitMQ dans notre ruche µServices et, par conséquent, d’utilisation des WebSockets. Afin de sécuriser WebSockets de la même manière que les API REST, je ne sais pas si nous devons toujours gérer la sécurité dans une passerelle et éventuellement la gérer elle-même au niveau du microservice. Parce que beaucoup de messages vont transiter, et nous devrions peut-être éliminer un middleware qui ralentira le processus.
Des questions:
Est-ce une bonne pratique? Qu'est-ce qui pourrait être mieux fait? Avez-vous des exemples de choses accomplies qui répondent aux mêmes besoins? Merci beaucoup pour vos partages et vos pensées.
Je vous suggère de regarder l'excellent webinaire de Dave Sayer sur ce sujet. Il suggère plusieurs options possibles allant de la session de printemps à OAuth2.
Vous trouverez le webinaire ici: https://spring.io/blog/2014/11/07/webinar-replay-security-for-microservices-with-spring-and-oauth2
Il y avait aussi un tutoriel avec des exemples de code mais je ne le trouve pas pour le moment.