Authentifzierung
Bevor gesicherte Anfragen durchgeführt werden können, ist ein gültiges Authentifizierungs-Merkmal- künftig Token
genannt - erforderlich. Die Authentifizierung erfolgt über API Aufruf mit Benutzername sowie Passwort-Schlüssel und gibt im Erfolgsfall ein JWT Token zurück.
Das Token muss bei allen Anfragen außer der Anmeldung übergeben werden.
Für die Authentifzierung sind folgende Informationen notwendig:
- Server-URL
- Benutzername / Email
- Passwort
Weiterhin werden folgende Informationen für weitere Aufrufe benötigt.
- Gemeinde-ID(s)
- Objekt-ID(s)
Diese Informationen lassen sich nach der Authentifizierung direkt über den get_config Aufrufen.
Token erzeugen
POST api /token/ |
Feld | Datentyp | Erklärung |
---|---|---|
username | string | Benutzername oder Email-Adresse |
password | string | das zugehörige Passwort |
Besonderheit
Die Authentifzierung kann zusätzlich zur Übergabe als JSON oder XML ebenfalls als application/x-www-form-urlencoded
übergeben. werden - eher bekannt als Formular-Daten.
Somit ist eine interaktive Anmeldung im System über z.B. ein HTML Formular oder eine Dritt-Anwendung möglich.
Beispiele
Request
{ "username": "m.mustermann", "password": "5bed8a17a5f780aa3b541e41c62416a64" } |
Response
{ "token": "eJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ...<abgeschnitten>" } |
Token verwenden
Das Token wird bei jeder Abfrage im HTTP Header "Authorization
" übergeben. Vor das im ersten Schritt erzeugte Token
Beispiel:
Bitte auf das Präfix JWT
sowie die Leerstelle zwischen dem Präfix und dem eigentlich Token achten. [PRÄFIX|LEERSTELLE|TOKEN]
Alternativ kann das JWT Token auch als GET-Parameter "jwt
" übergeben werden: https://.../?jwt=<token>
Code-Beispiele
Token abfragen
# pip3 install requests import requests payload = { 'username':'demo', 'password':'demo', } r = requests.post('https://<API_URL>/api/token/',data=payload) server_response_json = r.json() jwt_token = server_response_json.get('token') # Aus dem server_response objekt den String-Wert aus "token" extrahieren print(jwt_token) # <str>: eJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9... |
Token in Header übergeben
# pip3 install requests import requests payload = { # Beliebige Daten } # variable jwt_token aus vorherigem Beispiel headers = { 'authorization': 'JWT %s' % jwt_token # Ergibt "JWT eJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." } #Hier wird der Header mit übergeben r = requests.post('https://<API_URL>/<anfrage>/',data=payload,headers=headers) server_response_json = r.json() # ... |
No Comments