LU05.A01 - Authentifizierungsservice erstellen

Erstelle einen Authentifizierungsservice als RESTful Flask-Applikation.

GitHub Classroom Assignment

Für die Umsetzung im Modulunterricht erstellen wir eine RESTful Flask-Applikation.

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

Der Client sendet einen POST-Request mit dem Benutzernamen und dem Passwort.

Service

  • HTTP-Methode: POST
  • Pfad: /login
  • Daten:
    • username
    • password
  1. Parse die Argumente aus dem Request.
  2. Suche den Benutzer anhand des Benutzernamens
  3. Falls ein Benutzer gefunden wurde
    1. Falls der SHA256-Hash des übermittelten Passworts mit dem Passwort des Benutzers übereinstimmt:
      1. Erzeuge ein Token

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)

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


Marcel Suter

  • modul/m321/learningunits/lu05/aufgaben/authentifizierung.txt
  • Last modified: 2024/02/27 10:47
  • by msuter