====== LU05.A01 - Authentifizierungsservice erstellen ====== Erstelle einen Authentifizierungsservice als RESTful Flask-Applikation. **[[https://classroom.github.com/a/_7rYg-3J|GitHub Classroom Assignment]]** ===== 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 Benutzers * ''userrole'': Die Benutzerrolle des angemeldeten Benutzers * ''exp'': 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'': Benutzername * ''userrole'': 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//
---- {{tag>M321-LU05}} [[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Marcel Suter