Risultati API anomali

Ciao!

Sto cercando di eseguire una chiamata API per creare un nuovo argomento. Discourse API Docs

Utilizzando Postman, sto inviando la chiave API, il nome utente e il tipo di contenuto come intestazioni (Headers), e i dati JSON nel corpo.

Ho verificato che il nome utente e la chiave API siano corretti, ma la chiamata API restituisce l’HTML della nostra pagina di accesso.

È questo il comportamento atteso? Come posso aggirare il problema?

Puoi incollare la versione cURL della chiamata API che stai cercando di effettuare?

Certo…

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": "My fancy title",
    "raw": "Some random text to fill my topic",
    "category": 212,
    "created_at": "2020-06-22"
}'

Nel terminale ottengo questo output:

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

Redirecting to a different URI: https://staging-login.newrelic.com/login?return_to=https%3A%2F%2Fstaging-discuss.newrelic.com%2Fposts.json%

Fammi sapere se hai bisogno di altro da parte mia per aiutare nella risoluzione dei problemi :smiley:

Sembra che tu abbia una configurazione molto personalizzata con un proxy intermedio.

Questo non è un comportamento standard di Discourse, quindi sembra che sia causato dal tuo particolare proxy.

Forse c’è un’intestazione speciale che puoi inviare per bypassare il proxy? Devi controllare la documentazione di quel prodotto.

Fantastico! Grazie @Falco - mi metterò al lavoro con il nostro team di sviluppo :slight_smile:

Ciao @Falco - sono riuscito a superare il proxy, ma ora ricevo errori 403 BAD CSRF.

Vedo che questa discussione sembra essere rimasta incompiuta…

Hai qualche idea su come risolvere questi errori?

Ho appena testato il tuo esempio di comando curl in locale e funziona perfettamente, quindi la sintassi è corretta. È possibile che il proxy stia rimuovendo alcuni header? Questo potrebbe spiegare gli errori BAD CSRF, poiché le credenziali API non possono più essere lette o accessibili.

Grazie @blake

Il nostro proxy è completamente personalizzato, sviluppato internamente, e funge da livello frontale per il pubblico.

Sono connesso tramite VPN alla nostra rete interna e non sto raggiungendo l’URL pubblico, ma quello del backend (dietro il proxy), quindi le richieste non dovrebbero passare attraverso il proxy.

La nostra istanza di staging di Discourse è la versione 2.3.10.

L’API si comporta diversamente in quella versione?

No, la versione 2.3.10 include ancora tutte le funzionalità di autenticazione basate sugli header, quindi il comportamento non dovrebbe essere diverso.

Stai colpendo questa riga:

il che significa che la tua richiesta è in qualche modo malformata e non riesce a rilevare che si tratta di una richiesta API.

Poiché si tratta di un’istanza di staging e non locale, avrai nginx o un altro server web in esecuzione prima che la richiesta raggiunga Discourse. È possibile che nginx stia rimuovendo alcune intestazioni a seconda della tua configurazione. Queste potrebbero essere visibili nei log di nginx.

Questa è la riga in cui vengono lette le credenziali API dalle intestazioni della richiesta. Potresti anche aggiungere alcune istruzioni di debug a questo file per verificare se le intestazioni arrivano fino a questo punto.

@blake

Grazie! Ne discuterò con il nostro team di sviluppo :smiley:

Apprezzo il tuo aiuto