HintergrundZuul als Authentifizierungs-Gateway
Ich möchte mit dem Design in diesem article präsentiert umzusetzen.
Es kann durch das Diagramm unten zusammengefasst werden:
- Der Kunde zuerst mit dem IDP (OpenID Connect/OAuth2)
- Die IDP gibt einen Zugriffstoken (opak Token ohne User-Info authentifiziert)
- der Kunde macht
- der API-Gateway stellt eine Anfrage an den IDP mit dem Access Token ein Anruf das Zugriffstoken im Header Authorization über den API-Gateway verwenden
- Der IDP überprüft, dass der Access Token gültig ist und gibt Benutzerinformationen im JSON-Format zurück
- Das API-Gateway speichert die Benutzerinformationen in einem JWT und signiert sie mit einem privaten Schlüssel. Die JWT wird dann an den Downstream-Dienst weitergeleitet, der die JWT mit dem öffentlichen Schlüssel
- überprüft, ob ein Dienst einen anderen Dienst aufrufen muß, die Anforderung erfüllen sie die JWT gibt, entlang dem die Authentifizierung und Autorisierung für die Anfrage
Was ich bisher
ich habe die meisten getan werden:
- Frühling Wolke als globaler Rahmen
- Frühling Boot einzelne Dienste
- Netflix Zuul als die API-Gateway
ich auch ein Zuul PRE-Filter, der für eine Access-Token prüft geschrieben haben, in Kontakt mit der IDP und erstellen JWT zu starten. Der JWT wird dann zum Header für die Anfrage hinzugefügt, die an den Downstream-Dienst weitergeleitet wird.
Problem
Jetzt ist meine Frage an Zuul und seine Filter ganz spezifisch. Wenn die Authentifizierung aus irgendeinem Grund im API-Gateway fehlschlägt, wie kann ich das Routing stoppen und direkt mit einem 401 antworten, ohne die Filterkette fortzusetzen und den Anruf weiterzuleiten?
Im Moment, wenn die Authentifizierung fehlschlägt, fügt der Filter die JWT nicht zur Kopfzeile hinzu, und die 401 kommt vom nachgeschalteten Dienst. Ich hatte gehofft, dass mein Gateway diesen unnötigen Anruf verhindern könnte.
Ich versuchte zu sehen, wie ich com.netflix.zuul.context.RequestContext
verwenden konnte, um dies zu tun, aber die Dokumentation ist ziemlich schlecht und ich konnte keinen Weg finden.
Warum sind Sie nicht mit Spring Cloud Security für diesen? das bietet dieses out-of-the-box für afaik. –
@M.Deinum Ich dachte nicht, dass ich genug Kontrolle haben könnte, um dieses spezielle Design zu implementieren. Ich brauche Zugangstoken außerhalb meines gesicherten Netzwerks und JWT innerhalb. Ich habe nicht viel Erfahrung mit Spring Cloud Sicherheit. Glaubst du, ich könnte damit mein Design erreichen? – phoenix7360
Spring Cloud Security leitet das gleiche Token nur an die Downstream-Dienste weiter. Es ist nicht in der Lage, Token wie @ phoenix7360 zu tauschen oder zu verbessern. Es ist jedoch ein vernünftiger Baustein, von dem aus gearbeitet werden kann. –