こんにちは!
新しいトピックを作成する API 呼び出しを実行しようとしています。Discourse API Docs
Postman を使用して、API キー、ユーザー名、Content-Type をヘッダーとして送信し、本文に JSON データを送信しています。
API ユーザー名とキーが正しいことを確認しましたが、API 呼び出しの結果、サインインページの HTML が返ってきます。
これは想定された動作でしょうか?回避策はありますか?
こんにちは!
新しいトピックを作成する 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%
トラブルシューティングのサポートに、他に必要なものがあればお知らせください ![]()
中間にプロキシを配置した、非常にカスタマイズされた環境のようですね。
これは標準的な Discourse の動作ではないため、この問題はあなた方の特殊なプロキシ設定が原因のようです。
プロキシをバイパスするための特別なヘッダーを送信できるかもしれません。その製品のドキュメントを確認してみてください。
いいね!@Falco さん、ありがとう。開発チームと詳しく調べてみます ![]()
こんにちは @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 認証情報を取得する部分です。このファイルにいくつかのデバッグ文を追加して、ヘッダーがここまで到達しているか確認することもできます。