Es fällt mir schwer, eine anständige / sichere Authentifizierungsstrategie für eine Microservice-Architektur zu wählen. Der einzige SO-Beitrag, den ich zu diesem Thema gefunden habe, ist dieser: Single Sign-On in der Microservice-Architektur
Meine Idee hier ist, in jedem Dienst (z. B. Authentifizierung, Messaging, Benachrichtigung, Profil usw.) einen eindeutigen Verweis auf jeden Benutzer (ganz logisch dann seinen user_id
) und die Möglichkeit zu haben, den aktuellen Benutzer abzurufen, id
wenn er angemeldet ist.
Aus meinen Forschungen geht hervor, dass es zwei mögliche Strategien gibt:
1. Gemeinsame Architektur
Bei dieser Strategie ist die Authentifizierungs-App ein Dienst unter anderen. Aber jeder Dienst muss in der Lage sein, die Konvertierung durchzuführen session_id
=>, user_id
also muss es absolut einfach sein. Deshalb dachte ich an Redis, das den Schlüssel speichern würde: Wert session_id:user_id
.
2. Firewall-Architektur
Bei dieser Strategie spielt der Sitzungsspeicher keine Rolle, da er nur von der authentifizierenden App verwaltet wird. Dann user_id
kann das an andere Dienste weitergeleitet werden. Ich dachte an Rails + Devise (+ Redis oder Mem-Cache oder Cookie-Speicherung usw.), aber es gibt unzählige Möglichkeiten. Das einzige, was zählt, ist, dass Service X den Benutzer niemals authentifizieren muss.
Wie vergleichen sich diese beiden Lösungen in Bezug auf:
- Sicherheit
- Robustheit
- Skalierbarkeit
- Benutzerfreundlichkeit
Oder schlagen Sie vielleicht eine andere Lösung vor, die ich hier nicht erwähnt habe?
Ich mag die Lösung Nr. 1 besser, habe aber nicht viel Standardimplementierung gefunden, die mich in der Tatsache sichern würde, dass ich in die richtige Richtung gehe.
Ich hoffe meine Frage wird nicht geschlossen. Ich weiß nicht wirklich, wo ich es sonst fragen soll.
Danke im Voraus
quelle
Antworten:
Nach meinem Verständnis besteht eine gute Möglichkeit zur Lösung darin, das OAuth 2-Protokoll zu verwenden (weitere Informationen dazu finden Sie unter http://oauth.net/2/ ).
Wenn sich Ihr Benutzer bei Ihrer Anwendung anmeldet, erhält er ein Token und kann mit diesem Token an andere Dienste senden, um sie in der Anforderung zu identifizieren.
Beispiel für ein verkettetes Microservice-Design
Ressourcen:
quelle
Kurze Antwort: Verwenden Sie die tokenbasierte Authentifizierung vom Typ Oauth2.0, die in jeder Art von Anwendung wie einer Webanwendung oder einer mobilen App verwendet werden kann. Die Reihenfolge der Schritte für eine Webanwendung wäre dann zu
Das folgende Diagramm zeigt die Komponenten, die benötigt würden. Eine solche Architektur, die das Web und die Daten-API trennt, bietet eine gute Skalierbarkeit, Ausfallsicherheit und Stabilität
quelle
Das API-Gateway-Muster sollte verwendet werden, um dies mithilfe von OpenID Connect zu implementieren. Der Benutzer wird vom IDP authentifiziert und erhält das JWT-Token vom Autorisierungsserver. Jetzt kann das API-Gateway-System dieses Token in der Redis-Datenbank speichern und das Cookie im Browser setzen. Das API-Gateway verwendet das Cookie, um die Benutzeranforderung zu validieren, und sendet das Token an die Microservices.
API Gateway fungiert als ein einziger Einstiegspunkt für alle Arten von Client-Apps wie die öffentliche Java-Skript-Client-App, die herkömmliche Web-App, die native mobile App und Client-Apps von Drittanbietern in der Microservice-Architektur.
Weitere Informationen dazu finden Sie unter http://proficientblog.com/microservices-security/.
quelle
Sie können idenitty server 4 zur Authentifizierung und Autorisierung verwenden
Sie müssen die Firewall-Architektur verwenden, damit Sie mehr Kontrolle über Sicherheit, Robustheit, Skalierbarkeit und Benutzerfreundlichkeit haben
quelle