====== LU06.A01 - Autorisierung ====== Ergänze die Autorisierung mittels JSON Web Token in der vorgegebenen Applikation. **[[https://classroom.github.com/a/SFtBS-V2|GitHub Classroom Assignment]]** ===== 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. {{:modul:m321:learningunits:lu06:aufgaben:flask_port.png?400|}}
//=> 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//
---- {{tag>M321-LU06}} [[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Marcel Suter