by Ivan Milev, Rahul Gupta
Dieses Projekt implementiert einen einfachen Webservice zur Benutzerverwaltung mit den Endpunkten für Registrierung, Login und Verifizierung. Es handelt sich um eine einfache Lösung, bei der Benutzerrollen verwaltet und die Authentifizierung über JWT (JSON Web Token) durchgeführt wird.
Registrierung (/auth/admin/register):
- Administratoren können neue Benutzer registrieren, indem sie einen Namen, eine E-Mail-Adresse (als Benutzer-ID), eine Liste von Rollen (ADMIN, READER, MODERATOR) und ein Passwort angeben.
- Passwörter werden verschlüsselt gespeichert (nicht im Klartext).
- Die Benutzerinformationen werden in einer relationalen Datenbank gespeichert.
- Beim Start der Anwendung können Benutzerinformationen aus einer JSON-Datei geladen werden.
Login (/auth/signin):
- Benutzer können sich mit ihrer E-Mail-Adresse und ihrem Passwort anmelden.
- Nach erfolgreichem Login wird ein signiertes JWT zurückgegeben, das die genehmigten Rollen des Benutzers enthält.
Verifizierung (/auth/verify):
- Das JWT wird überprüft, und wenn es gültig ist, wird die Benutzerrolle bestätigt.
- Bei ungültigem JWT wird eine 403 Unauthorized-Antwort zurückgegeben.
Das Deployment erfolgt mittels Docker insbesonder docker-compose.yml
Vom github runterladen und in den obigen ordner verschieben
Im obigen Ordner soll eine .env datei erstellt werden, syntax wie in der —> .env.example
Im Ordner ein terminal öffnen und den Befehl
docker-compose up --build
In diesem Terminal läuft nun die Datenbank samt der Java anwendung. Um die Applikation zu testen folge das Tutorial unten.
Register User through Admin JWT Token
curl -X PUT http://localhost:8080/auth/admin/register -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJqb2huZHNvZUBleGFtcGxzZGUuY29tIiwicm9sZXMiOlsiUkVBREVSIl0sImlhdCI6MTczMDQyNjc0OCwiZXhwIjoxNzMwNDI4MTg4fQ.fPlH-zbFPYWY8Vvtd7c5_4X_hXQZccJIuec5AKm4zyQ" -d '{"username": "John Doe", "email": "johndsoe@examplsde.com", "roles": ["READER"], "password": "securePassword"}'
Login mittels /sign
curl -X POST http://localhost:8080/auth/signin -H "Content-Type: application/json" -d '{"email": "admin@example.com", "password": "securePassword1"}'
Nach dem Sich der Admin einlogged kriegt man ein JWT Token womit man dann im nächsten Schritt den JWT Token überprüfen kann
Verify using /verify
curl -X GET http://localhost:8080/auth/verify -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbkBleGFtcGxlLmNvbSIsInJvbGVzIjpbIkFETUlOIl0sImlhdCI6MTczMDQyNjQ1MCwiZXhwIjoxNzMwNDI3ODkwfQ.M-zxams69_tI_igCZ1HW7IU1kfLHwmtH5ry4zee5stM"
Register User through Admin JWT Token
curl -X POST http://localhost:8080/auth/signin -H "Content-Type: application/json" -d "{\"email\": \"admin@example.com\", \"password\": \"securePassword1\"}"
Login mittels /sign
curl -X POST http://localhost:8080/auth/signin -H "Content-Type: application/json" -d "{\"email\": \"admin@example.com\", \"password\": \"securePassword1\"}"
Nach dem Sich der Admin einlogged kriegt man ein JWT Token womit man dann im nächsten Schritt den JWT Token überprüfen kann
Verify using /verify
curl -X GET http://localhost:8080/auth/verify -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbkBleGFtcGxlLmNvbSIsInJvbGVzIjpbIkFETUlOIl0sImlhdCI6MTczMTU5OTgwMSwiZXhwIjoxNzMxNjAxMjQxfQ.maqyNh1H-jLkdRCV8IMqUbQqHWIj0Lnjgco8eIKyG8U"
Check if Data succesfully changed:
docker exec -it postgrescontainer /bin/bash
psql -U postgres
\c users
\dt
SELECT * FROM users;
nvd api ist sehr hilfreich um (ist auch ein maven plugin) um dependencies auf ihre vulnerabilites zu überprüfen
[1] https://elearning.tgm.ac.at/mod/assign/view.php?id=136679
[3] Java JWT, https://mvnrepository.com/artifact/com.auth0/java-jwt/4.4.0
https://mvnrepository.com/artifact/org.postgresql/postgresql/42.7.4
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa
https://mvnrepository.com/artifact/org.springframework.security/spring-security-config/6.3.4