API Authentifizierung-Problem
-
Hallo,
ich habe eine Problem mit der ChurchTools Authentifizierung. Ich habe mich für die Implementierung der Authentifizierung an die Demo auf Github gehalten.
Das ganze funktioniert eigentlich auch wunderbar nur habe ich Probleme, wenn in einem Passwort das Sonderzeichen "&" einegsetzt wird, deklariert ChurchTools die Login-Daten als falsch (obwohl sie korrekt sind). Sobald ich das Sonderzeichen "&" aus dem Passwort entferne, nimmt ChurchTools die Login-Daten wieder an.
Meine Vermutung ist, dass es ein Problem mit dem URL-En bzw. Decoding gibt. Denn die PHP-Funktion http_build_query baut einen String zusammen, der via POST Request an die ChurchTools API geschickt wird. Sowohl die Emailadresse als auch das Passwort bekommen einen URL-Encoding. Testweie hatte ich auche einmal das URL-Decoding für das Passwort deaktiviert, nur führt das natürlich ebenfalls zu einem Fehler, weil das "&" im Passwort dann dazu führt, dass quasi ein weitere Parameter im POST Request eingeleitet wird, obwohl er eigentlich Bestandteil des Passwortes ist. Ich vermute das entweder es auf der ChurchTools Seite ein Problem bei URL-Decoding des Passwortes gibt, wenn ein "&" enthalten ist oder das an meiner PHP-Installation nicht stimmt.
Kann dieses Problem irgendjemand bestätigen bzw. könnt Ihr eine API-Authentifizierung druchführen, wo das Passwort ein "&" enthält?
Grüße Immanuel
-
Ich habe dasselbe Problem. Das gilt aber nicht nur für "&", sondern auch für andere Sonderzeichen wie "?", welche für URL's verwendet werden.
-
@immi Könntest du deinen Code auf GitHub stellen? Dann können wir uns einfacher anschauen was da schief läuft.
-
@davidschilling also der Code zur Authentifizierung entspricht nahezu 1:1 dem was jmrauen dazu auf GitHub veröffentlicht hat (siehe hier). Der relevante Teil ist ja die Funktion sendRequest() und die stimmt 100% mit der GitHub Version überein.
@moensch welche PHP Version nutzt eucher ChurchTools?
-
Das Problem kommt daher, dass die Parameter als URL Parameter geschickt werden.
Man kann diese auch als Request Body im JSON Format schicken, dann gibt es das Problem nicht.
-
@davidschilling könntest du da ein genaueres Beispiel geben für das vorliegende Problem? Ich verstehe nicht ganz, was du mit "Request Body" in dem Fall meinst.
Wie müsste sendRequest() ungefähr aussehen?Gruss Simon
-
@prosong Ich bin grad auch an dem Thema ...
https://github.com/bwl21/CT-API-Tools/tree/develop
Ich weiß, ist der n+1 Versuch, das zu generalisieren ...
Vielleicht ist das interessant für dich. Auf jeden Fall kannst du da Code abschauen.
Das ist ein Fork - die Meriten für den code gebühren daher fodinabor.
-
@davidschilling Ich habe versucht, das Passwort in JSON zu senden. Sobald aber bestimmte Sonderzeichen enthalten sind, erhalte ich "Passwort ist falsch" zurück.
$url = 'https://xxx.church.tools?q=login/ajax&func=getUserLoginToken'; $data = array( 'email' => $email, 'password' => $password, 'directtool' => 'yes' ); $options = array( 'http' => array( 'method' => "POST", 'header' => "Content-type: application/json" ."\r\naccept: application/json", 'content' => json_encode($data) ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); $data = json_decode($result);