Microservice zu Microservice-Aufrufen, Autorisierung aus einer Warteschlangennachricht
Kontext Ich erstelle eine Cloud-Plattform zur Unterstützung mehrerer Anwendungen mit SSO. Ich benutzeKeycloak zur Authentifizierung undNetflix Zuul zur Autorisierung (API-Gateway) bisKeycloak Spring Sicherheitsadapter.
Jeder Mikroservice erwartet einen Authorization-Header, der eine gültige JWT enthält, von der er den Benutzernamen (Subname) zur Verarbeitung der Anforderung benötigt. Jeder Mikroservice-zu-Mikroservice-Aufruf sollte zuerst über Netflix Zuul erfolgen und den Authorization-Header übergeben, um eine zustandslose Validierung zu gewährleisten. Diese Strategie ermöglicht es jedem Mikrodienst, zu wissen, wer der Benutzer (Unter) ist, der den Mikrodienst indirekt aufruft.
Problem / Frage 1: Was passiert, wenn ein Microservice aus einer Warteschlangennachricht aufgerufen wird? Eine Idee, die ich hatte, ist es, die Informationen in Bezug auf die Nachricht + userInfo in der Warteschlange zu speichern und einen dedizierten Mikrodienst zu erstellen, um diese Art von Nachrichten zu verarbeiten. Bei diesem Ansatz sollte dieser spezielle Mikrodienst die userInfo aus der Warteschlange lesen und die Nachricht verarbeiten .
UPDATE 1: Per E-Mail-Antwort von einem anderen Forum ist das Speichern des JWT in einer Warteschlange keine gute Idee, da es leicht abgebaut werden könnte.
Problem / Frage 2: Aber was passiert, wenn der vorherige spezielle Mikrodienst einen anderen normalen Mikrodienst aufrufen möchte, der eine JWT in einem Header erwartet? Sollte dieser spezielle Mikrodienst von sich aus ein JWT erstellen, um sich als Benutzer auszugeben und die regulären Mikrodienste aufrufen zu können?
Eine andere Lösung, von der ich dachte, dass sie die ursprüngliche JWT in der Warteschlange speichert, aber was passiert, wenn die Warteschlange später den speziellen Microservice aufruft? Kurz nachdem das JWT nicht mehr gültig ist (es ist abgelaufen) und der aufgerufene Microservice die Anfrage ablehnt?
Mögliche Lösungen (Aktualisiert per João Angelo Diskussion, siehe unten)
Ich sollte die Anfragen meiner Benutzer authentifizieren Authorization Code Flow) und meine Dienste Client-Anmeldeinformationen gewähren), beide Requests sollten Benutzerinformationen in der Payload enthalten. Wenn die Anforderung vom Benutzer kommt, muss überprüft werden, ob die Nutzdaten-Benutzerinformationen mit den JWT-Ansprüchen übereinstimmen. Wenn die Anfrage von einem Dienst kommt, muss ich nur diesem Dienst vertrauen (solange er unter meiner Kontrolle steht).
Ich werde Ihre Hilfe sehr schätzen. Vielen Dank