LU06.A01 - Autorisierung
Ergänze die Autorisierung mittels JSON Web Token in der vorgegebenen Applikation.
Ausgangslage
Die Webapplikation bietet 3 unterschiedliche Services an. Jenachdem welche Rolle ein Client hat, darf er diese Services benutzen.
Service | HTTP-Methode | Rollen | |||
---|---|---|---|---|---|
customer | employee | admin | |||
readData | GET | X | X | X | |
saveData | POST | - | X | X | |
deleteData | DELETE | - | - | X |
Der Client muss die Rolle in einem JSON Webtoken als Claim userrole
mitsenden.
Auftrag
- Realisiere die nötigen Decorators um die Autorisation des Clients zu prüfen.
- Ergänze jeden Service mit den korrekten Decorators.
Decorators
@valid_token
Das Token im Authorization-Header wird decodiert und geprüft.
Falls ein gültiges Token vorhanden ist, wird der Claim userrole
im globalen Kontext g
gespeichert.
@customer_required
Prüft ob im globalen Kontext eine userrole
vorhanden ist.
Die userrole
muss customer
, employee
oder admin
sein.
@employee_required
Prüft ob im globalen Kontext eine userrole
vorhanden ist.
Die userrole
muss employee
oder admin
sein.
@admin_required
Prüft ob im globalen Kontext eine userrole
vorhanden ist.
Die userrole
muss admin
sein.
Testen
Um deine Applikation zu testen, benötigst du ein gültiges Token. Dieses kannst du über das Login in der Applikation „m321-lu05-a01-authentication“ erhalten.
- Beide Applikationen müssen den gleichen Schlüssel im
ACCESS_TOKEN_KEY
verwenden. - Die Applikationen müssen auf unterschiedlichen Ports laufen:
- m321-lu05-a01-authentication / Port 5000
- m321-lu06-a01-authorization / Port 5001
Den Port kannst du in der „Run/Debug Configuration“ von PyCharm über „Additional options“ einstellen.
⇒ GitHub Repo für externe Besucher
GitHub Repository https://github.com/templates-python/m321-lu06-a01-authorization
Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden