Seite 1 von 1

Backend-Authentifizierung über HTTP POST Request

Verfasst: Do 19. Dez 2013, 15:24
von jeadorf
Hallo,

Ich suche nach einer einfachen Möglichkeit mich via HTTP Post Request (beispielsweise mit Python) in ein Contenido Backend einzuloggen. Sprich, man schickt Benutzername und Passwort als Parameter einer POST-Anfrage mit und erhält dann in der Antwort des Servers ein Token. Mit letzterem kann man dann weitere Anfragen senden. Der Hintergrund ist, dass sich so eine Möglichkeit ergibt, das Backend von anderen Programmen aus anzusprechen. Als ersten Ansatz habe ich mir den Quelltext des Login-Formulars angesehen und die POST-Anfrage im Browser inspiziert (also eine Art von "Reverse Engineering"), aber auf die Schnelle ist mir das leider nicht gelungen, da mir der Login via POST trotz korrekten Benutzernamens, Passworts, und Zeitstempel aus irgendeinem Grunde nicht gelingt.
  • * username
    * password
    * vaction
    * formtimestamp
Mit etwas mehr Aufwand und Inspektion (z.B. Contenido-Quelltext) gelingt mir das sicherlich früher oder später. Ist der Authentifizierungsprozess irgendwo dokumentiert? Oder gibt es gar schon eine Schnittstelle (z.B. RESTful API)?

Julius

Re: Backend-Authentifizierung über HTTP POST Request

Verfasst: Mo 23. Dez 2013, 21:23
von xmurrix
Hallo jeadorf,

willkommen im CONTENIDO Forum.

Die Authentifizierung außerhalb des regulären Backend ist in CONTENIDO eigentlich nicht vorgesehen.

Dennoch kannst du mit ein paar kleineren Änderungen eine Authentifizierung hinbekommen.

Bei einer erfolgreichen Authentifizierung gibt es kein Token als Serverantwort aber du bekommst ein Cookie zurück und kannst diesen für jede weitere Anfrage verwenden, sofern dein Client mit Cookies umgehen kann.

Habe das bisher nicht gemacht, denke aber dass es folgendermaßen möglich sein sollte:

Zuerst solltest du den Backend-Authentication Handler aus dem Trunk verwenden, also die Datei class.auth.handler.backend.php von http://svn.dev.contenido.org/trunk/cont ... ackend.php holen und bei dir in contenido/classes/auth/ ablegen. Da gab es kürzlich eine Änderung, die dafür sorgt, dass fehlgeschlagene Login Requests über AJAX nicht das Loginformular ausgeben, sondern ein JSON String mit der entsprechenden Fehlermeldung.

Schicke ein POST-Request an das Script contenido/ajaxmain.php, der POST sollte die entsprechenden Werte haben, wie du schon beschrieben hast. Zusätzlich sollte der Request noch einen Parameter "ajax=1" enthalten.

Eine RESTful API gibt es nicht aber ich kann mich erinnern, dass es vor ein paar Jahren mal einen Artikel darüber gab, wie man in CONTENIDO einen auf SOAP basierenden Webservice implementiert.

Gruß
xmurrix

Re: Backend-Authentifizierung über HTTP POST Request

Verfasst: Do 26. Dez 2013, 17:44
von jeadorf
Hallo xmurrix,

Der Client ist mit Python Requests (http://docs.python-requests.org/en/latest/) geschrieben, laut Doku wird der Umgang mit Cookies unterstützt. Vielen Dank für die Skizze, wie ein Anmeldevorgang aussehen müsste. Warum ein ähnliche Versuch bei mir bis dato nicht funktioniert hatte (statt einer JSON habe ich probehalber das HTML nach der Fehlermeldung durchsucht und auf diese Art und Weise Feedback erhalten), ist mir noch nicht ganz klar. Vermutlich habe ich irgendwas falsch gemacht, aber ich gehe der Sache erstmal nicht weiter nach, da ich auf eine Alternativlösung gestoßen bin.

Als Quick&Dirty-Lösung habe ich das Einloggen mit Benutzername und Passwort im Python-Klienten durch die Eingabe der aus dem Browser kopierten Session-ID ersetzt. Wenn man sich erst im Browser einloggt, und die Session ID bei einem POST-Request vom Python-Klienten aus mitschickt (für das Hochladen eines Bildes vom Python-Klienten aus), dann komme ich auch zum Ziel. Wenn auch nicht besonders hübsch, so ist diese Lösung ist mir insofern recht, da sie billig und relativ robust gegenüber potenziellen Änderungen im Contenido-Backend ist. Damit gebe ich mich erstmal zufrieden.

Julius