Contao-Camp 2024
Ergebnis 1 bis 1 von 1

Thema: Remote Login mit externem Skript

  1. #1
    Contao-Nutzer Avatar von complanar
    Registriert seit
    30.08.2010.
    Ort
    Eisenberg (Thür)
    Beiträge
    11

    Standard Remote Login mit externem Skript

    Hallo,

    ich versuche für eine Smartphone-App ein Skript zu schreiben, das auf Seiten eines geschützten Bereichs (Vertretungsplan einer Schule) zugreifen soll (bzw. gibt es die schon und sie muss aktualisiert werden).

    Gerade verzweifle ich an der Authentifizierung.
    Ich hole mir die Login-Seite mit dem Formular per HTTP GET REQUEST, setze alle Felder auf die entsprechenden Werte, sende sie per POST-Request und … bekomme wieder die alte Seite.

    Außer username und password habe ich autologin, FORM_SUBMIT und REQUEST_TOKEN bei den POST-Daten mitgesendet.
    Im Header des Request habe ich zudem den Referer gesetzt und darauf geachtet, dass sonst alle Header die gleichen sind wie bei der ersten Anfrage (Contao könnte ja misstrauisch sein, diese überprüfen und zu dem Schluss kommen, dass es zwei verschiedene Geräte sind). Außerdem habe ich alle Cookies mitgesendet (z.B. PHPSESSID).

    Es macht keinen Unterschied, ob ich:
    • ein falsches Passwort sende, oder nicht
    • einen falschen Benutzer sende, oder nicht
    • den Referer sende, oder nicht
    • das REQUEST_TOKEN sende, oder nicht


    Auch in der error.log finden sich keine Fehler.
    Ein Herumprobieren mit browsertypischen Headern (User-Agent, Accept usw.) hat auch nichts gebracht.

    Hab ich etwas Entscheidendes vergessen?

    Die alte Smartphone App lief mit Contao 3.3 wunderbar. Mittlerweile läuft die Seite aber mit Contao 4.4 und es geht leider nicht mehr.
    Ich habe leider nicht nachvollziehen können, wie die Authentifizierung intern läuft, sprich, was alles überprüft wird.

    Vielleicht kann mir ja jemand behilflich sein.

    Für den Fall, dass jemand mit meinem Python-Skript etwas anfangen kann:
    Code:
    #!/usr/bin/env python3
    import requests
    from lxml import html
    
    
    url = "http://fsg.local/vertretungsplan.html" # meine lokale Entwicklungsumgebung
    # Mein Versuch mit browsertypischen Headern – brachte nichts
    defaultHeaders = {
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
      "Accept-Encoding": "gzip, deflate, br",
      "Accept-Language": "de,en-US;q=0.7,en;q=0.3",
      "Connection": "keep-alive",
      "DNT": "1",
      "Host": "fsg.local",
      "Upgrade-Insecure-Requests": "1",
    }
    
    loginPage = requests.get(url, headers=defaultHeaders)
    print(loginPage.text)
    PHPSESSID = loginPage.cookies.get("PHPSESSID")
    
    doc = html.fromstring(loginPage.text)
    
    doc.make_links_absolute(url)
    
    loginForm = doc.xpath('//form[@id="tl_login_12"]')[0]
    FORM_SUBMIT = loginForm.xpath('//input[@name="FORM_SUBMIT"]')[0].value
    REQUEST_TOKEN = loginForm.xpath('//input[@name="REQUEST_TOKEN"]')[0].value
    
    target = loginForm.action
    
    # Hier stehen die Autentifizerungsdaten der App
    username = "USER"
    password = "PASSW"
    autologin = "1" # Die App meldet sich normalerweise selbst automatisch an (außer beim ersten mal)
    
    # Wir ergänzen ein paar Header
    requestHeaders = defaultHeaders
    requestHeaders["Content-Type"] = "application/x-www-form-urlencoded"
    requestHeaders["Referer"] = url
    
    answerPage = requests.get(target, data={"FORM_SUBMIT": FORM_SUBMIT, "REQUEST_TOKEN": REQUEST_TOKEN, "username": username, "password": password, "autologin": autologin}, cookies=loginPage.cookies, headers=requestHeaders);
    
    print(answerPage.text)
    
    # loginPage.text und answerPage.text sind vollkommen identisch, abgesehen von einem eingebundenen Zufallsbild
    Geändert von complanar (21.10.2018 um 19:41 Uhr)
    complanar
    --- Wie soll ich wissen, was ich denke, bevor ich höre, was ich sage? ---

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •