API Authorisierung
-
Hallo Leute,
ich baue aktuell eine kleine Seite auf der man zukünftig die Kalendereinträge sehen soll.
Allerdings habe ich ein bisschen Probleme mit der API, wenn ich den API Call /api/login mache kommt nur:{ "data": { "status": "success", "message": "login.success", "personId": 1, "location": "?=churchhome" } }
Eigentlich würde Ich einen Token erwarten mit dem ich dann die nächsten Calls machen kann (die auch nicht gehen)
Es wäre cool wenn mir jemand vielleicht sagen kann woran das liegt
Danke Euch
Simon -
@simongolda
Hi,ich habe das (in plain-Java) einem Cookiehandler überlassen.
final CookieManager cookieManager = new CookieManager(); CookieHandler.setDefault(cookieManager); final URL loginUrl = new URL("https://xxx.church.tools/api/login"); final HttpURLConnection loginConnection = (HttpURLConnection) loginUrl.openConnection(); loginConnection.setRequestMethod("POST"); loginConnection.setDoOutput(true); loginConnection.setRequestProperty("Accept", "application/json"); loginConnection.setRequestProperty("Content-Type", "application/json"); final String data = "{\r\n \"username\" : \"Name\",\r\n \"password\" : \"PASSWORT\"\r\n}"; final byte[] out = data.getBytes(StandardCharsets.UTF_8); final OutputStream stream = loginConnection.getOutputStream(); stream.write(out); System.out.println(loginConnection.getResponseCode() + " " + loginConnection.getResponseMessage());
Der Cookiehandler behält die Credentials auch über verschiedene Connections hinweg (man kann also die loginConnection auch wieder schließen).
-
Hallo @simongolda,
im ersten Schritt musst du mit POST /api/login dieses Datenobjekt abrufen, wie du es ja schon machst.
Jetzt kannst du mit der "personId" den Login-Token abrufen:
GET /api/persons/{personId}/logintoken
Mit dem Login-Token kannst du dann alle zukünftigen Requests autorisieren.
-
@simongolda Deine Intuition ist richtig. So sieht der Code in Python aus:
# Base url for all API access root_url = "https://xxx.church.tools" base_url = root_url + "/api" # Create session with credentials ct_session = requests.Session() credentials = {"username": userid, "password": password} response = ct_session.post(base_url + "/login", json = credentials)
Danach können alle weitere request an dieselbe session geschickt werden. Python sendet die entsprechenden Tokens unter der Decke hin und her.
-
@simongolda Die Antwort von @thommyb ist gut. ChurchTools arbeitet mit Session Cookies. Diese sollten verwendet werden wenn man mit der Api arbeitet. Für den ersten Login kann entweder das Login Token oder der Login Endpoint verwendet werden.
Wenn man die Session Cookies nicht verwendet muss bei jedem Aufruf ein neuer Login gemacht werden was sehr langsam ist.