web-dev-qa-db-fra.com

Spring Cloud + Zuul + JWT pour les jetons de valeur / référence

Après avoir lu l'article Comment contrôler l'identité de l'utilisateur dans les microservices J'ai essayé pour implémenter un tel schéma de contrôle d'accès (jetons de valeur et de référence), mais après avoir parcouru plusieurs autres sujets et exemples dans GitHub liés à Spring Security + OAuth + Zuul, je n'ai pas pu trouver des exemples concrets sur la manière d'y parvenir. Tous les exemples qui impliquent [~ # ~] jwt [~ # ~] renvoient les détails de l'utilisateur lorsque le jeton est retourné, et c'est ce que j'aimerais éviter. Les détails de l'utilisateur ne doivent jamais atteindre directement le client mais doivent être transmis aux services backend à la place. Le tutoriel Spring Security + AngularJs contient de nombreuses informations sur la façon d’évoluer un vers une application sécurisée, mais utilise un jeton d'accès ou mentionne la possibilité d'obtenir les détails de l'utilisateur directement via [~ # ~] jwt [~ # ~].

Cette question SO, tilisation de Zuul comme passerelle d'authentification par @ phoenix7360 , c'est exactement l'approche que j'ai essayé de mettre en œuvre mais elle ne fournit qu'un bref aperçu de la configuration requise pour mener à bien ce type d'approche de sécurité pour les microservices. Veuillez vous référer à l'image dans cette question pour une image claire de la façon dont cela se passerait.

Je n'arrive pas à comprendre comment le Zuul Pre-Filter doit être configuré et ce que le serveur d'autorisation la configuration devrait ressembler. Comme indiqué dans l'article et dans la question SO, le flux se présenterait comme suit:

Externe (HTTPS)

  1. Le client s'authentifie auprès du serveur OAuth2
  2. OAuth Server renvoie un jeton d'accès opaque (un UUID sans autre information)
  3. Le client envoie la demande à la passerelle API avec le jeton d'accès dans l'en-tête d'autorisation
  4. API Gateway demande les détails de l'utilisateur au serveur OAuth avec le jeton d'accès dans l'en-tête d'autorisation
  5. OAuth Server vérifie que le jeton d'accès est valide et renvoie les informations utilisateur au format JSON

Interne (HTTP/S)

  1. API Gateway crée un JWT avec les détails de l'utilisateur et le signe avec une clé privée
  2. API Gateway ajoute le JWT à demander et le transmet au serveur de ressources
  3. Le serveur de ressources vérifie le JWT à l'aide de la clé publique d'API Gateway

Remarque: la passerelle API doit renvoyer une erreur si le serveur OAuth indique que le jeton d'accès n'est plus valide.

Comment fonctionnerait le ZuulFilter? Une nouvelle demande doit-elle être émise sur le serveur OAuth (par exemple, via RestTemplate), ou ces schémas sont-ils pris en charge avec l'implémentation actuelle? Existe-t-il une configuration particulière requise pour les classes JavaConfig pour OAuth et Zuul? Si quelqu'un connaît un exemple de travail, ce serait vraiment utile et serait formidable pour référence future concernant ce sujet.

J'utilise Spring Boot (1.4.0-M3) + Spring OAuth + Spring Cloud (Eureka, Ribbon, Zuul)

Je sais que cette question est très similaire à celle liée précédemment, et si ce n'est pas la bonne façon de le faire, je m'excuse, mais je pensais qu'un nouveau thread serait mieux que de demander de l'aide sur un thread SO qui visait à résoudre un autre problème.

Merci d'avance!

24
Tom Kelly

JHipster fait un très bon travail dans la gestion de ce problème. Si je veux expliquer brièvement le processus de connexion, vous vous connectez d'abord, à temps vous récupérez toutes les informations dont vous avez besoin pour passer à vos services ci-dessous (tels que nom d'utilisateur, e-mail, etc.), puis vous les transmettez à vos microservices. vous pouvez voir le lien ci-dessous d'okta pour plus d'informations https://developer.okta.com/blog/2018/03/01/develop-microservices-jhipster-oauth

1
ksadjad