API の異常な結果

こんにちは!

新しいトピックを作成する API 呼び出しを実行しようとしています。Discourse API Docs

Postman を使用して、API キー、ユーザー名、Content-Type をヘッダーとして送信し、本文に JSON データを送信しています。

API ユーザー名とキーが正しいことを確認しましたが、API 呼び出しの結果、サインインページの HTML が返ってきます。

これは想定された動作でしょうか?回避策はありますか?

お送りいただいている API 呼び出しの cURL バージョンを貼り付けていただけますでしょうか?

もちろん…

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"
}'

ターミナルでは、以下のような出力が表示されます。

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

異なる URI へリダイレクト中: https://staging-login.newrelic.com/login?return_to=https%3A%2F%2Fstaging-discuss.newrelic.com%2Fposts.json%

トラブルシューティングのサポートに、他に必要なものがあればお知らせください :smiley:

中間にプロキシを配置した、非常にカスタマイズされた環境のようですね。

これは標準的な Discourse の動作ではないため、この問題はあなた方の特殊なプロキシ設定が原因のようです。

プロキシをバイパスするための特別なヘッダーを送信できるかもしれません。その製品のドキュメントを確認してみてください。

いいね!@Falco さん、ありがとう。開発チームと詳しく調べてみます :slight_smile:

こんにちは @Falco さん、プロキシを通過することはできましたが、現在は 403 BAD CSRF エラーに直面しています。

このスレッドは未完成のようですね…

これらのエラーを回避する方法について、何かご存知でしょうか?

ローカルで例の curl コマンドをテストしましたが、問題なく動作しており構文も正しいようです。プロキシが一部のヘッダーを除去している可能性はありませんか?それが原因で API 認証情報が読み取れず、BAD CSRF エラーが発生しているのかもしれません。

@blake さん、ありがとうございます。

当社のプロキシは完全に社内独自開発のもので、外部向けの前層となっています。

私は社内ネットワークに VPN で接続しており、パブリック URL ではなくバックエンド(プロキシの裏側)の URL にアクセスしているため、リクエストはプロキシを経由しないはずです。

当社のステージング環境の Discourse インスタンスはバージョン 2.3.10 です。

そのバージョンでは API の挙動が異なりますか?

いいえ、v2.3.10 には依然としてヘッダーベースの認証関連の処理が含まれているため、動作に違いはないはずです。

以下の行にヒットしています:

これは、リクエストが何らかの形で不正であり、API リクエストとして検出できないことを意味します。

これはローカル環境ではなくステージングインスタンスであるため、Discourse に到達する前に nginx や他の Web サーバーが動作しているはずです。設定次第では、nginx が一部のヘッダーを除去している可能性があります。これらは nginx のログに表示されているかもしれません。

これはリクエストヘッダーから API 認証情報を取得する部分です。このファイルにいくつかのデバッグ文を追加して、ヘッダーがここまで到達しているか確認することもできます。

@blake

ありがとうございます!開発チームに共有します :smiley:

ご協力ありがとうございます