2016-06-16 11 views
2

Ich arbeite an Microservice Architektur, aber ich stehe vor einigen Herausforderungen.Server zu Server Kommunikation in Microservices

Lassen Sie mich zunächst einen kurzen Überblick über die Architektur geben.

  1. Der Benutzer meldet sich an und erhält ein signiertes Token, das zum Aufruf aller REST APIS verwendet wird.

  2. Es wird viele API-Server geben, auf denen APIs mithilfe der Spring-Sicherheit und Autorisiert gemäß den Benutzerrollen gesichert werden.

  3. Dienste müssen miteinander interagieren, um Informationen zu erhalten/zu aktualisieren.

  4. Jeder Dienst kann ein Token-Problem durch den Auth-Server überprüfen.

Problem: -

  1. Alles funktioniert gut, wenn Benutzer sich anmeldet und die gleiche Token verwendet wird und für jeden Dienst passsed die across.So validiert, Dienstleistungen Dont vertrauen müssen einander als Das Token wird übergeben.

  2. Jetzt ist das Problem, gibt es einige Dienste, die vom Server selbst aufgerufen werden müssen, ohne sich anzumelden. Sagen wir einen Server zum Serveranruf. Wie wird ein Dienst den Anruf von anderen Diensten authentifizieren und autorisieren?

las ich über den Frühling, aber Microservices Zuul ist auch nicht der Retter hier wie jeder API-Server hat Feder Sicherheit eingebettet und nicht nur der API-Gateway.

Eine Lösung kann sein, dass jeder Dienst seinen eigenen Standardbenutzer mit certaing Rollen hat, der verwendet wird, um sich anzumelden -> Token holen -> anderen Server api mit Token aufrufen.

Können Sie mir bitte einige Hinweise in Server zu Serveraufrufen geben, wo jeder Server mit Federsicherheit authentifiziert und autorisiert ist.

Danke.

+0

Sichern Sie diese Dienste nicht oder erlauben Sie keinem Zugriff von einer bestimmten IP-Adresse aus. Schreiben Sie einfach die richtigen Sicherheitsregeln. –

+0

@ M.Deinum ... diese Dienste müssen gesichert werden, da sie von externen Clients ebenso wie mobiles/REST aufgerufen werden. –

+0

Wie bereits erwähnt, schreibe einfach die richtigen Sicherheitsregeln, wenn interne (oder bestimmte IP-Bereiche) Zugriff erlauben, sonst wird ein Token benötigt. Es kommt also auf die richtigen Sicherheitsregeln an, anstatt zu versuchen, sie zu umgehen. –

Antwort

0

In OAuth2 gibt es einen Ablauf für die Server-zu-Server-Autorisierung (Client Credentials Grant Flow). Der aufrufende Dienst ist ein regulärer Client für den zweiten (den Ressourcenserver), daher muss er ein Token erhalten und verwenden.

Kurz gesagt, der Client teilt dem Autorisierungsserver mit, wer er ist (mit seiner Client-ID/App-ID), der Autorisierungsserver gibt ihm ein Token, mit dem der Ressourcenserver abgefragt werden kann.

Ich habe eine Ressource in Französisch here, das Sequenzdiagramm ist in Englisch und sollte hilfreich sein. Sie können mehr Informationen über diesen Fluss leicht finden.

Für das Spring Security spezifische Zeug, siehe spring-security-oauth2 doc.

+0

gerade benutze ich nicht OAuth. Aber ich denke, dass die obigen Kommentare, bei denen ich die Sicherheit für die IP-Adresse umgehen kann, eine gute Sache sein können. –

1

Im Idealfall sollten wir in der Microservices-Architektur die anderen Dienste nicht innerhalb eines Dienstes aufrufen. Wir sollten stattdessen den Ansatz Publisher/Subscriber für Server-zu-Server-Kommunikation verwenden.

Obwohl, wenn Sie es tun wollen, nur die Auth-Token als Header-Pass zur Authentifizierung der Dienst an der Downstream-Dienst verwendet, wo das Token erneut authentifiziert werden und wird somit Antwort geben, sobald authentifiziert.