Anomale API-Ergebnisse

Hallo!

Ich versuche, einen API-Aufruf zu tätigen, um ein neues Thema zu erstellen. Discourse API Docs

Mit Postman sende ich den API-Schlüssel, den Benutzernamen und den Content-Type als Header sowie JSON-Daten im Body.

Ich habe überprüft, dass der API-Benutzername und der Schlüssel korrekt sind, aber die API-Antwort enthält das HTML unserer Anmeldeseite.

Ist das zu erwarten? Wie kann ich das umgehen?

Könntest du bitte die cURL-Version des API-Aufrufs, den du auszuführen versuchst, einfügen?

Okay…

curl -X POST 'https://staging-discuss.newrelic.com/posts.json' \
     -H 'Api-Username: RyanVeitch' -i \
     -H 'Api-Key: My-API-Key' -i \
     -H 'Content-Type: application/json' \
     -d \
'{
    "title": "Mein ausgefallener Titel",
    "raw": "Einiger zufälliger Text, um mein Thema zu füllen",
    "category": 212,
    "created_at": "2020-06-22"
}'

Im Terminal erhalte ich folgende Ausgabe:

HTTP/1.1 307 Temporary Redirect
Proxied-By: Service Gateway
Strict-Transport-Security: max-age=31536000; includeSubDomains
Location: https://staging-login.newrelic.com/login?return_to=https%3A%2F%2Fstaging-discuss.newrelic.com%2Fposts.json
content-type: text/plain;charset=UTF-8
content-length: 138

Umleitung zu einer anderen URI: https://staging-login.newrelic.com/login?return_to=https%3A%2F%2Fstaging-discuss.newrelic.com%2Fposts.json%

Lass mich wissen, falls du von meiner Seite aus noch etwas brauchst, um bei der Fehlerbehebung zu helfen :smiley:

Es scheint, als hättest du eine sehr individuelle Konfiguration mit einem Proxy dazwischen.

Das ist kein Standardverhalten von Discourse, daher sieht es so aus, als ob dies durch deinen speziellen Proxy verursacht wird.

Vielleicht kannst du einen speziellen Header senden, um den Proxy zu umgehen? Das müsstest du in der Dokumentation dieses Produkts prüfen.

Cool! Danke @Falco – ich werde mich mit unserem Entwicklerteam daran machen :slight_smile:

Hey @Falco – ich habe den Proxy erfolgreich durchlaufen, bekomme aber jetzt 403 BAD CSRF-Fehler.

Ich sehe, dass dieser Thread irgendwie unvollständig wirkt…

Hast du eine Idee, wie man diese Fehler umgehen kann?

Ich habe Ihren Beispiel-curl-Befehl gerade lokal getestet, und er funktioniert bei mir einwandfrei, sodass die Syntax vollständig korrekt ist. Ist es möglich, dass der Proxy einige Header entfernt? Das könnte der Grund für die BAD CSRF-Fehler sein, da die API-Anmeldedaten dann nicht mehr gelesen/zugriffen werden können.

Danke, @blake

Unser Proxy ist eine vollständig eigene, intern entwickelte Lösung und fungiert als erste Schicht für das öffentliche Netzwerk.

Ich bin über ein VPN in unser internes Netzwerk eingebunden und greife nicht auf die öffentliche URL zu, sondern direkt auf die Backend-URL (hinter dem Proxy). Daher sollten die Anfragen nicht über den Proxy laufen.

Unsere Staging-Discourse-Instanz hat die Version 2.3.10.

Verhält sich die API in dieser Version anders?

Nein, v2.3.10 enthält immer noch die gesamte Header-basierte Authentifizierung, also sollte es sich nicht anders verhalten.

Sie treffen auf diese Zeile:

Das bedeutet, dass Ihre Anfrage in irgendeiner Weise fehlerhaft ist und nicht erkannt werden kann, dass es sich um eine API-Anfrage handelt.

Da dies eine Staging-Instanz und nicht lokal ist, läuft vor der Anfrage an Discourse entweder nginx oder ein anderer Webserver. Möglicherweise entfernt nginx je nach Konfiguration bestimmte Header. Diese könnten in den nginx-Protokollen erscheinen.

Dies ist die Zeile, in der die API-Anmeldedaten aus den Anfrage-Headern gelesen werden. Sie könnten auch einige Debug-Anweisungen in diese Datei einfügen, um herauszufinden, ob die Header diesen Punkt erreichen.

@blake

Danke! Ich werde das mit unserem Entwicklungsteam besprechen :smiley:

Danke für deine Hilfe