From 642261d53dbad6c5914046ec61335e849c596e11 Mon Sep 17 00:00:00 2001
From: Julian Horner <julianhorner@web.de>
Date: Sat, 11 Jan 2020 16:26:29 +0100
Subject: [PATCH] Update README.md

---
 README.md | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/README.md b/README.md
index abc0e84..9dab0cb 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
 # microservices
 ## Worum geht es in diesem Projekt?
-Das Projekt setzt eine einfache Microservices-Architektur um. Enthalten sind ein API-Gateway, ein Service f&uuml;r die Authentifizierung, ein Service-Discovery-Server und ein Service welcher zwei einfache HTML-Dokumente verwaltet.
+Das Projekt setzt eine einfache Microservices-Architektur um. Enthalten sind, jeweils in einem eigenen Projekt, ein API-Gateway, ein Service f&uuml;r die Authentifizierung, ein Service-Discovery-Server und ein Service welcher zwei einfache HTML-Dokumente verwaltet.
 
-Der Benutzer kann den API-Gateway standardm&auml;&szlig;ig &uuml;ber http://localhost:2222/ erreichen. Hier wird eine ungesicherte Seite als Antwort gesendet, welche einen Link zu einer gesichterten Seite enth&auml;lt. Wenn der Benutzer auf den Link klickt wird eine Seite zur&uuml;ckgeliefert die ein Login-Formular enth&auml;lt. Hier kann der Benutzer sich authentisieren und wenn er die erforderliche Berechtigung besitzt wird ihm die angeforderte Ressource vom API-Gateway zur&uuml;ckgeliefert.
+Der Benutzer kann den API-Gateway standardm&auml;&szlig;ig &uuml;ber http://localhost:2222/ erreichen. Hier wird eine ungesicherte Seite als Antwort gesendet, welche einen Link zu einer gesichterten Seite enth&auml;lt. Wenn der Benutzer auf den Link klickt wird eine Seite zur&uuml;ckgeliefert die ein Login-Formular enth&auml;lt. Hier kann der Benutzer sich authentisieren. Wenn er die erforderliche Berechtigung besitzt wird ihm die angeforderte Ressource vom API-Gateway zur&uuml;ckgeliefert.
 
-Es existieren zwei Benutzer, ein Benutzer mit dem Benutzernamen "Admin" und einer mit dem Namen "Default", dass Passwort beider Benutzer ist "12345". Der Benutzer mit dem Namen "Admin" hat entsprechende Berechtigungen und darf auf die gesch&uuml;tzte Ressource zugreifen, der Benutzer mit dem Namen "Default" hingegen hat nur eingeschr&auml;nkte Berechtigungen und darf nicht auf die Ressource zugreifen. Der Default Nutzer bekommt bei einem Versuch auf die Ressource zuzugreifen eine 403 HTTP Status Response (Forbidden). Diese zeigt dem Benutzer an das die Authentifizierung zwar erfolgreich war, die Autorisierung allerdings fehlgeschlagen ist und er kein Recht hat auf die Ressource zuzugreifen.
+Es existieren zwei Benutzer, ein Benutzer mit dem Benutzernamen "Admin" und einer mit dem Namen "Default", dass Passwort beider Benutzer ist "12345". Der Benutzer mit dem Namen "Admin" hat eine Rolle welche dazu berechtigt ist auf die gesch&uuml;tzte Ressource zuzugreifen, der Benutzer mit dem Namen "Default" hingegen hat eine Rolle welche nur eingeschr&auml;nkte Berechtigungen besitzt, daher darf "Default" nicht auf die Ressource zugreifen. Der Default Nutzer bekommt bei einem Versuch auf die Ressource zuzugreifen einen 403 HTTP Response Status Code (Forbidden). Diese zeigt dem Benutzer an das die Authentifizierung zwar erfolgreich war, die Autorisierung allerdings fehlgeschlagen ist und er kein Recht hat auf die Ressource zuzugreifen.
 ## Details
 Das Projekt enth&auml;lt mehrere git submodule von welchen jedes ein eigenst&auml;ndiges git Projekt darstellt. Die Submodule sind:
 
@@ -24,7 +24,7 @@ Das Projekt nutzt einen Serverseitigen-Discovery-Mechanismus, welcher &uuml;ber
 Der Eureka-Server wird im Projekt eureka-server umgesetzt. Die Services registrieren sich bei diesem als Eureka-Clients und schicken diesem in regelm&auml;&szlig;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&uuml;gbaren Services entfernt. Da die Services sich selbst&auml;ndig beim Server registrieren k&ouml;nnen diese auf einfache Art und Wei&szlig;e gefunden werden.
 
 ## api-gateway
-Der API-Gateway wird im Projekt api-gateway umgesetzt. Der Client kommuziert ausschlie&szlig;lich mit dem API-Gateway. Je nachdem welchen Pfad der Client anfragt, &uuml;berpr&uuml;ft der API-Gateway ob die erforderlichen Berechtigungen vorliegen, routet die Anfrage an einen der Services weiter und das resultierende Ergebnis wieder zur&uuml;ck zum Client. Wenn Services untereinander kommunizieren erfolgt diese ebenfalls &uuml;ber den API-Gateway. Der API-Gateway erfragt daf&uuml;r den Standort der Services beim Eureka-Server.
+Der API-Gateway wird im Projekt api-gateway umgesetzt. Der Client kommuziert ausschlie&szlig;lich mit dem API-Gateway. Je nachdem welchen Pfad der Client anfragt, &uuml;berpr&uuml;ft der API-Gateway ob die erforderlichen Berechtigungen vorliegen, routet die Anfrage an einen der Services weiter und das resultierende Ergebnis wieder zur&uuml;ck zum Client. Wenn Services untereinander kommunizieren erfolgt dies ebenfalls &uuml;ber den API-Gateway. Der API-Gateway erfragt daf&uuml;r den Standort der Services beim Eureka-Server.
 
 Das Routing wird mit zuul umgesetzt. zuul ist der Gateway Service, von Netflix, welcher neben routing weitere Funktionalit&auml;ten anbietet, zum Beispiel  Ausfallsicherheit, Lastverteilung oder Sicherheitsaspekte. zuul ist ebenfalls im Spring-Cloud-Framework enthalten.
 
@@ -42,7 +42,7 @@ Die letztendliche Autorisierung erfolgt &uuml;ber den Token welchen der Benutzer
 Der Authentifizierungsservice wird im Projekt authentication-service umgesetzt. Zur durchf&uuml;hrung der Authentizierung nutzt das Projekt Thymeleaf,
 JWT und das Spring-Security-Framwork.
 
-Der authentication-service &uuml;berpr&uuml;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 entsprechenden Schl&uuml;ssel. Der Token enth&auml;lt die Anmeldeinformation des Benutzers und seine Rechte. Der Token wird dem Benutzer &uuml;ber den API-Gateway zugesendet.
+Der authentication-service &uuml;berpr&uuml;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 entsprechenden Schl&uuml;ssel. Der Token enth&auml;lt die Anmeldeinformation des Benutzers und seine Rollen. Der Token wird dem Benutzer &uuml;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 securedPage.html und die index.html verwaltet. Beide Dokumente enthalten einen Link zur jeweils anderen Seite.
@@ -71,17 +71,17 @@ und unter Windows mit...
 
     mvnw.cmd spring-boot:run
 
-Nach dem Start der letzten Anwendung kann es vorkommen das manche der Anwendungen noch nicht beim Eureka-Server registriert sind bzw. der API-Gateway eine veraltete Version der Liste der beim Eureka-Server registrierten Server vorliegen hat. Da der API-Gateway in diesem Fall den jeweiligen Service nicht findet wird er eine Weiterleitung verweigern und eine Fehlermeldung ausl&ouml;sen. Ist das der Fall empfiehlt es sich einige Sekunden zu warten bis der API-Gateway sich eine neue Version der Liste der Services besorgt hat.
+Nach dem Start der letzten Anwendung kann es vorkommen das manche der Anwendungen noch nicht beim Eureka-Server registriert sind bzw. der API-Gateway eine veraltete Version der Liste der beim Eureka-Server registrierten Server vorliegen hat. Da der API-Gateway in diesem Fall den jeweiligen Service nicht findet wird er eine Weiterleitung verweigern und eine Fehlermeldung ausl&ouml;sen. Ist das der Fall empfiehlt es sich einige Sekunden (mindestens dreißig Sekunden) zu warten bis der API-Gateway sich eine neue Version der Liste der Services besorgt hat.
 
 ## Submodule aktualisieren
 Um die submodule zu aktualisieren kann im microservice Projekt folgender Befehl eingegeben werden...
 ```
 git submodule foreach git pull origin master
 ```
-## Hinzuf&uuml;gen eines neuen Service
+## Hinzuf&uuml;gen eines neuen Service und einschränken des Zugriffs
 Um einen neuen Service zum Projekt hinzuzuf&uuml;gen und den Zugriff zu diesen auf bestimmte Benutzer zu beschr&auml;nken m&uuml;ssen mehrere Schritte getan werden.
 
-Als erstes muss definiert werden zu welchem Service bei welchem Anfrage-Pfad weitergeleitet wird. Dazu muss die unten abgebildete application.yml angepasst werden. 
+Als erstes muss definiert werden zu welchem Service bei welchem Anfrage-Pfad weitergeleitet wird. Dazu muss die unten abgebildete application.yml angepasst werden. Die unten abgebildete Datei befindet sich im Projekt api-gateway. 
 
     spring:
       application:
@@ -109,13 +109,13 @@ Als erstes muss definiert werden zu welchem Service bei welchem Anfrage-Pfad wei
           strip-prefix: false # Forward the request all together with the auth path
           sensitive-headers: Cookie, Set-Cookie # Avoid to send internal cookies to external entities
 
-Wenn zum Beispiel der Service "test-service" beim angefragten Pfad "/test/" aufgerufen werden soll m&uuml;ssen folgende Zeilen zur Datei hinzugef&uuml;gt werden...
+Wenn zum Beispiel der Service "test-service" beim Pfad "/test/" aufgerufen werden soll m&uuml;ssen folgende Zeilen, unter dem Punkt "zuul: routes:" zur Datei hinzugef&uuml;gt werden...
  
     test-service:
       path: /test/**
       service-id: test-service
 
-Dann muss f&uuml;r den Pfad f&uuml;r welchen der Zugang beschr&auml;nkt werden soll, in der unten abgebildeten Klasse SecurityConfiguration eine neue Beschr&auml;nkung hinzugef&uuml;gt werden . 
+Dann muss f&uuml;r den Pfad f&uuml;r welchen der Zugang beschr&auml;nkt werden soll, in der unten abgebildeten Klasse SecurityConfiguration eine neue Beschr&auml;nkung hinzugef&uuml;gt werden. Die Klasse SecurityConfiguration befindet sich ebenfalls im Projekt api-gateway.
     
     package de.rtuni.ms.apig.config;
     
@@ -179,9 +179,10 @@ Dann muss f&uuml;r den Pfad f&uuml;r welchen der Zugang beschr&auml;nkt werden s
         //---------------------------------------------------------------------------------------------
     }
 
-Wenn zum Beispiel auf den Pfad "testPfad" nur Nutzer mit der Rolle "TESTER" zugreifen d&uuml;rfen dann muss der folgende Code in der configure(HttpSecurity http)-Methode eingef&uuml;gt werden.
+Wenn zum Beispiel auf den Pfad "test" nur Nutzer mit der Rolle "TESTER" zugreifen d&uuml;rfen dann muss der folgende Code in der configure(HttpSecurity http)-Methode eingef&uuml;gt werden.
+
 ```
-        .antMatchers("/testPfad/**").hasRole("TESTER")
+        .antMatchers("/test/**").hasRole("TESTER")
 ```
 
 
-- 
GitLab