From d5fe808176d42df8639f8d802424a3eb275b2d05 Mon Sep 17 00:00:00 2001 From: Julian Horner <julianhorner@web.de> Date: Tue, 7 Jan 2020 21:28:07 +0100 Subject: [PATCH] Update README.md --- README.md | 52 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 484b108..6760189 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,53 @@ + # microservices ## What is this project about? Das Projekt setzt eine einfache Microservices-Architektur um. Enthalten sind ein API-Gateway, ein Service für die Authentifizierung, ein Service-Discovery-Server und ein Service welcher zwei einfache HTML-Dokumente verwaltet. ## Details Das Projekt enthält mehrere git submodule von welchen jedes submodul ein eigenständiges git Projekt darstellt. Die Submodule sind: -* api-gateway -* authentication-service -* dummy-service -* eureka-server -### Spring-Boot und Spring-Cloud -Jedes dieser Projekte bzw. jede der Anwendungen nutzt das Spring-Boot und das Spring-Cloud-Framework. Das Spring-Boot-Framework automatisiert verschiedene Abläufe wie das einrichten eines Webservers oder das deployen einer Anwendung auf diesem und erleichtert somit die Entwicklung und das Starten einer Anwendung. Das Projekt nutzt einen Serverseitigen-Discovery-Mechanismus, dies erfolgt über Eureka einen Service-Discovery-Server welcher vom Spring Cloud Framework bereitsgestellt wird. - -### eureka-server -Der Eureka Server wird im Projekt eureka-server umgesetzt. Die Services registrieren sich bei diesem als Eureka-Clients und schicken diesem in regelmäßigen Intervallen Aktualisierungen ihres Standorts. Wenn ein Service sich eine bestimmte Zeit lang nicht mehr beim Server meldet wird dieser abgemeldet und aus der Liste der verfügbaren Servies entfernt. Da die Services sich selbständig registrieren können die Services auf eine einfache Art und Weiße gefunden werden. -authentication-service + - api-gateway + - authentication-service + - dummy-service + - eureka-server + +## Spring-Boot und Spring-Cloud +Jeder der Services nutzt das Spring-Boot und das Spring-Cloud-Framework. + +Das Spring-Boot-Framework automatisiert verschiedene Abläufe wie das einrichten eines Webservers oder das deployen einer Anwendung und erleichtert somit sowohl die Entwicklung als auch das Starten einer Anwendung. + +Das Projekt nutzt einen Serverseitigen-Discovery-Mechanismus, welcher über Eureka umgesetzt wird. Eureka ist der Service-Discovery Server und Client, von Netflix, welcher über das Spring Cloud Framework bereitsgestellt wird. -### api-gateway -Ein Client kommuziert ausschließlich mit dem API-Gateway, je nachdem welchen Pfad der Client anfragt überprüft der API-Gateway ob die erforderlichen Berechtigungen vorliegen und routet die Anfrage an einen der Services weiter und das resultierende Ergebnis wieder zurück zum Client. Wenn Services untereinander kommunizieren erfolgt diese ebenfalls über den API-Gateway. +## eureka-server +Der Eureka Server wird im Projekt eureka-server umgesetzt. Die Services registrieren sich bei diesem als Eureka-Clients und schicken diesem in regelmäßigen Intervallen Aktualisierungen ihres Standorts. Wenn ein Service sich eine bestimmte Zeit lang nicht mehr beim Server meldet wird dieser abgemeldet und aus der Liste der verfügbaren Services entfernt. Da die Services sich selbständig beim Server registrieren können diese auf einfache Art und Weiße gefunden werden. -### Ergänzen mit Autorisierungs Details +## api-gateway +Der API-Gateway wird im Projekt api-gateway umgesetzt. Der Client kommuziert ausschließlich mit dem API-Gateway. Je nachdem welchen Pfad der Client anfragt, überprüft der API-Gateway ob die erforderlichen Berechtigungen vorliegen, routet die Anfrage an einen der Services weiter und das resultierende Ergebnis wieder zurück zum Client. Wenn Services untereinander kommunizieren erfolgt diese ebenfalls über den API-Gateway. Der API-Gateway erfragt dafür den Standort der Services beim Eureka-Server. -### authentication-service +Das routing wird mit zuul umgesetzt. zuul ist der Gateway Service, von Netflix, welcher neben routing weitere Funktionalitäten anbietet, zum Beispiel Ausfallsicherheit, Lastverteilung oder Sicherheitsaspekte. zuul ist ebenfalls im Spring-Cloud-Framework enthalten. +Des Weiteren nutzt das Projekt Thymeleaf, JWT und das Spring-Security-Framwork zum überprüfen der Benutzer Berechtigungen und entsprechender Weiterleitung dieser. -### dummy-service -Der dummy-service ist eine einfache Anwendung welche zwei HTML-Dokumente verwaltet, die securedPage.html und die index.html. Beide Dokumente enthalten einen Link zur jeweils anderen Seite. +**Authorisierung** +Wenn ein Benutzer auf eine Ressource zugreifen will, auf die nur Benutzer mit einer besonderen Rolle zugreifen dürfen, erkennt der API-Gateway dies und sendet dem Benutzer eine Aufforderung sich zu authentisieren. Dies geschieht über eine Login Seite auf welcher der Benutzer seinen Benutzernamen und sein Passwort eingibt. Die Anmeldedaten werden an den API-Gateway gesendet welcher diese wiederum an den Authentifizierungsservice weiterleitet. -Außerdem enthält das Projekt eine Controller Klasse welche Anfragen abfängt und einem HTML-Dokument zuordnet. Diese Zuordnung wird ebenfalls automatisiert von Spring Boot durchgeführt. +Der Authentifizierungsservice überprüft ob die vom Benutzer eingegebenen Anmeldedaten korrekt sind. Wenn das der Fall ist erstellt der Service einen Token, welcher den Benutzer repräsentiert. Der Token wird dem Benutzer über den API-Gateway zugesendet. -Damit der dummy-service von anderen Services gefunden wird registriert sich dieser in einer Service-Registry dem eureka-server. Dies erfolgt über Eureka einen Service Discovery Server welcher vom Spring Cloud Framework bereitsgestellt wird. +Die letztendliche Autorisierung erfolgt über den Token welchen der Benutzer zusammen mit der jeweilig angeforderten Ressource zum API-Gateway schickt. Der API-Gateway entschlüsselt den Token mit dem dazugehörigen Schlüssel und validiert somit das der Token vom Authentifizierungsservice ausgestellt wurde. Als letztes wird überprüft ob der Benutzer die erforderlichen Rechte besitzt um auf die Ressource zuzugreifen und diese wenn die Rechte vorliegen zurückgegeben. + +## authentication-service +Der Authentifizierungsservice wird im Projekt authentication-service umgesetzt. Der authentication-service überprüft ob die vom Benutzer eingegebenen Anmeldedaten korrekt sind. Wenn das der Fall ist erstellt der authentication-service einen Token und signiert diesen mit einer HMAC mit SHA256 und einem geheimen Schlüssel. Der Token enthält die Anmeldeinformation des Benutzers und seine Rechte. Der Token wird dem Benutzer über den API-Gateway zugesendet. + +## dummy-service +Der Service welcher die zwei HTML-Dokumente verwaltet wird im Projekt dummy-service umgesetzt. Der dummy-service ist eine einfache Anwendung welche die erwähnten HTML-Dokumente verwaltet, die securedPage.html und die index.html. Beide Dokumente enthalten einen Link zur jeweils anderen Seite. + +Außerdem enthält das Projekt eine Controller Klasse welche Anfragen abfängt und einem HTML-Dokument zuordnet. Diese Zuordnung wird ebenfalls automatisiert von Spring Boot durchgeführt. ## Run the application +Um die Anwendung laufen zu lassen müssen die einzelnen Projekte in einer bestimmten Reihenfolge gestartet werden. +1. Starten des Eureka-Servers + +## Update submodules ## Add a new service to the API-Gateway -- GitLab