LU05.A01 - Authentifizierungsservice erstellen
Erstelle einen Authentifizierungsservice als RESTful Flask-Applikation.
Umsetzung
Für die Umsetzung im Modulunterricht erstellen wir eine RESTful Flask-Applikation.
Benutzerkonten
Die Benutzerkonten speichern wir als JSON-Objekte in einer Datei.
[ { "username": "hans@abc.xy", "password": "addb0f5e7826c857d7376d1bd9bc33c0c544790a2eac96144a8af22b1298c940", "role": "customer" }, { "username": "andrea@abc.xy", "password": "d14769b181706206c248aadd1c01dbf37568572f9a702a6a92bc2d8d9573a9a5", "role": "employee" }, { "username": "beatrice@abc.xy", "password": "33c5ebbb01d608c254b3b12413bdb03e46c12797e591770ccf20f5e2819929b2", "role": "admin" } ]
Das Passwort ist als SHA-256 Hash gespeichert.
Benutzer | Passwort |
---|---|
hans@abc.xy | geheim |
andrea@abc.xy | passWORT |
beatrice@abc.xy | passwort |
Request
Der Client sendet einen POST-Request mit dem Benutzernamen und dem Passwort.
Service
- HTTP-Methode:
POST
- Pfad:
/login
- Daten:
username
password
Verarbeitung
Funktion "post" / "auth_resource.py"
- Parse die Argumente aus dem Request.
- Suche den Benutzer anhand des Benutzernamens
- Falls ein Benutzer gefunden wurde
- Falls der SHA256-Hash des übermittelten Passworts mit dem Passwort des Benutzers übereinstimmt:
- Erzeuge ein Token
Funktion "_make_token" / "auth_resource.py"
Erzeuge ein JSON Web Token mit den Claims:
username
: Benutzername des angemeldeten Benutzersuserrole
: Die Benutzerrolle des angemeldeten Benutzersexp
: Ablaufdatum / Berechnet aus der aktuellen Zeit und der Gültigkeit in Sekunden (TOKEN_DURATION
)
Response
Authentifizierung erfolgreich
Die Response unseres Services besteht aus dem HTTP-Statuscode “200” und einem JSON Web Token. Das Token enthält:
exp
: Ablaufzeit des Tokens. Berechnet aus der aktuellen Zeit und der Gültigkeit in Sekunden (TOKEN_DURATION
)username
: Benutzernameuserrole
: Benutzerrolle
Authentifizierung nicht erfolgreich
Als Response wird der HTTP-Statuscode 401
gesendet.
⇒ GitHub Repo für externe Besucher
GitHub Repository https://github.com/templates-python/m321-lu05-a01-authentication
Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden