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:
usernamepassword
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
