2017-04-13 4 views
0

In meiner Architektur habe ich mehrere interne Dienste, die miteinander kommunizieren müssen. Ich habe auch einen Identity Access Management Service, der Informationen über Benutzer, Rollen und (grobkörnige) Berechtigungen speichert.Bevorzugter Ansatz für Inter-Service-Kommunikation in Microservices/SOA

Komponenten (nicht erschöpfende Aufzählung):

  • Service A
  • Service B
  • IAM Service

Anstatt Dienste A und B vollen Zugang miteinander über IP weißen Listen geben, Ich möchte, dass sie als Benutzer ausgeführt werden, die vom IAM-Dienst verwaltet werden. Die Dienste benötigen also eine Möglichkeit, die Rollen und Berechtigungen des anderen zu erfahren. Ich habe den folgenden Ansatz in Betracht gezogen:

Ich erstelle undurchsichtige API-Schlüssel für die Benutzer, unter denen die Dienste ausgeführt werden. Ich speichere sie bei jedem Service. Wenn Dienst A den Dienst B aufruft, übergibt er seinen API-Schlüssel. Dienst B ruft dann den IAM-Dienst auf, um den Schlüssel zu validieren und Informationen über die Rollen von Dienst A zu erfassen, bevor die Anforderung verarbeitet wird. Dienst B speichert seine Antworten vom IAM-Dienst, um die Chartiness zu reduzieren.

Ich habe Lösungen mit einem API-Gateway gesehen, aber dies setzt voraus, dass der Datenverkehr außerhalb des Netzwerks erfolgt. Ich möchte den internen Datenverkehr nicht nach außen umleiten, nur um opake Tokens in by-value JWTs umzuwandeln.

+0

Was ist die Frage? –

Antwort

1

Opaque by-Wert-Token werden wirklich für folgende Zwecke bestimmt sind:

  • Verringerung der Token-Größe auf ein Minimum (für Client-Effizienz)
  • Ausblenden der Details von dem, was behauptet, ein Benutzer hat, da sie nicht brauchen,
  • Erzwingen einen Nachschlag der Ansprüche auf jeder Anfrage wissen (so können Sie den Widerruf/Änderung sofort Token)

Sie sind in einem internen Netzwerk so ist nicht Nutzlastgröße so groß eine i und du kümmerst dich wahrscheinlich nicht darum, Ansprüche auf andere Dienste zu verlieren. Wenn sich Ihre Ansprüche nicht oft ändern, werden undurchsichtige Tokens wahrscheinlich nicht benötigt. Dies bedeutet, dass Ihr Dienst lediglich ein Token für den Wert nach Wert anfordern muss, um auf interne Ressourcen zugreifen zu können.

Das ist nicht so schlimm.

Wenn Sie bei jeder Anforderung die Werte ref nach Wert konvertieren müssen oder die Authentifizierungsschleife für die Benutzer vereinfachen möchten, ist ein Proxy-Ansatz am besten. Dies würde Anfragen an Ihren Dienst abfangen und das by-ref-Token (oder vielleicht apikey) durch ein wertwertiges Token ersetzen. Der Vorteil hierbei wäre, dass Sie die Verwendung von Wert-Token genauer steuern können und Ihre Kunden sich nicht um Ihre interne Sicherheitsinfrastruktur kümmern müssen.

Dieser Ansatz fügt mehr Overhead für mehr Kontrolle hinzu. Es ist auch in Ordnung, dies von Ihren internen Diensten aus aufzurufen.

Ich schrieb ein wenig über the authentication proxy Muster auf meinem Blog.

Verwandte Themen