Microservices Authentication / Autorisierung

internet

Top Contributor
Hallo,

ich möchte mich von einem Monolith trennen, in dem ich derzeit verschiedene Systeme habe:

  • Ticketsystem
  • CRM
  • Forum
  • Ideenforum
  • App Store
  • Bildergalerie
  • ....

Mein CRM System ist meine Hauptanwendung. Die andere Systeme sind nach und nach entstanden.
Das heißt wenn sich ein User im CRM - System einloggt, sollte er automatisch auch im Ticketsystem, Forum etc. angemeldet sein.

Meine Idee ist nun:
  • Pro System eine eigene Datenbank
  • Kommunikation zwischen den Systemen via REST Webservice
  • Jedes System verwaltet selbst seine User
  • Jedes System hat eine eigene Rechte / Berechtigungsverwaltung

Bei der Registrierung beim CRM System erfolgt dann folgendes bpsw. im Ticketsystem:
  • API Request gegen das Ticketsystem, womit ein neuer User erstellt wird (unique ID ist die Emailadresse).
  • Im Ticketsystem wird in einer Tabelle (API_USER) ebenfalls ein User mit einem Token angelegt + Referenz auf den angelegt User im Ticketsystem
  • Dieser API Key / Token wird ebenfalls zurück an das CRM System gegeben
  • Das CRM System speichert ebenfalls in einer SQL Tabelle den neu erzeugten API Key vom Ticketsystem ab.

Wenn der User nun vom CRM System bspw. ein neues Ticket aufmachen möchte, dann wird hier die API des Ticketsystem verwendet.
Ebenfalls wird im HTTP Header der Token aus der Tabelle API User mitgegeben.
Auf der Seite im Ticketsystem wird nun eben dieser Token gegen die API_USER - Tabelle geprüft.
Falls dieser OK ist, kann das Ticket erstellt werden.

Ist dieser Ansatz so richtig?
 

Oneixee5

Top Contributor
Ich sehe hier mehrere Nachteile. Wie läuft das ab, wenn ein Nutzer die Ticket API in ein eigenes Programm integrieren will? Man muss sich immer erst beim CRM anmelden - das ist umständlich - und die Services verwenden dann keine richtige Anmeldung. Also kein Timeout etc.
Ich würde entweder einen Proxy vor alle Anwendungen setzen, welcher die Anmeldung übernimmt oder ein Single Sign On (SSO) - System verwenden.
 

internet

Top Contributor
danke für die Antwort.
Nein, ich würde das implementieren, dass man nicht zwingend nur über das CRM System sich einloggen muss.
Es gibt ebenfalls eine zusätzliche Anmeldemaske.

I.d.R. erfolgt die erste Anmeldung aber über das CRM System.
Wie oben in dem Prozess aufgezeigt, wird noch ein User im Ticketsystem erstellt.
Hier könnte man ein Random Passwort erstellen, sodass ebenfalls ein Login über eine GUI des Ticketsystem möglich wäre.
Eventuell eben auch das PW, das aktuell im CRM verwendet wird.
Man müsste dann aber aufpassen, wenn der User das PW im CRM System ändert, ob man bpsw. auch das PW im Ticketsystem dann ändert.

Ich verwende Apache Shiro - vllt. hilft das auch zur Beurteilung....
 

Marinek

Bekanntes Mitglied
Du möchtest einen funktionierenden Monolithen in eine komplexe Microservice Struktur überführen.

Deine Fragen zeigen gleichzeitig, dass du dir nicht ausreichend Gedanken dazu gemacht hast. Es fehlt mir jetzt zunächst die Vision wohin das führen soll. Welche Vorteile sollen dadurch entstehen? Was sind die Anforderungen hinter der Maßnahme "in microservices" überführen?

Es fehlen dir auch grundlegende Konzepte, wie oAuth 2.0 oder SAML in Verbindung mit den richtigen technologien und Protokollen, wie JWT.

OIDC ist zunächst ein Protokoll. Das funktioniert in Java genauso wie in jeder anderen Sprache.

Zusammenfassend: Deine ANfrage ist extrem allgemein und gleichzeitig höchst komplex. Ich denke mit dem aktuellen Vorgehen wird das sehr anstrengend werden.
 

Ähnliche Java Themen


Oben