TeamCity 2020.2 ヘルプ

CSRF の保護

TeamCity のクロスサイトリクエストフォージェリ(CSRF)保護は、バージョン 2017.1(問題(英語))以降に実装されています。この保護は、HTTP リクエストに関するいくつかの要件を意味します。

バージョン 2020.1 以降、TeamCity は保護手段として CSRF トークンのみを使用します。TeamCity の以前のバージョンでは、Origin/Referer ヘッダーも使用されていました。

セキュリティトークンを取得するには、GET https://your-server/authenticationTest.html?csrf リクエストを送信します。
トークンを渡すには、X-TC-CSRF-Token HTTP リクエストヘッダーまたは tc-csrf-token HTTP パラメーターを使用します。

HTTP リクエストの CSRF チェック

TeamCity の観点から HTTP リクエストの安全性を検討するときは、次のチェックが順番に行われます。

  1. HTTP リクエストが( GET などの)変更されていないリクエストである場合、安全と見なされます。

  2. HTTP リクエストのパラメーターまたは HTTP ヘッダにセキュアな CSRF トークンがあり、このトークンがユーザセッションに格納されているものと一致する場合、安全であると見なされます。

ブラウザー以外の HTTP クライアントへの影響

ブラウザー以外の API アクセスの場合は、リクエストのトークンベースの認証を使用し、HTTP クライアントで Cookie サポートを無効にすることをお勧めします。

Cookie を使用する必要がある場合、API は最初に CSRF トークンを取得し、それを Cookie 対応のリクエストで提供する必要があります。

CORS クライアントへの影響

CORS リクエストを使用するには、ここで説明するように CORS サポートを設定します。この構成は、GET 要求には十分です。
CORS を介して POST/PUT/DELETE リクエストを送信する必要がある場合は、authenticationTest.html?csrf 呼び出しを使用して CSRF トークンを取得し、このトークンに変更する HTTP リクエストを提供する必要があります。

トラブルシューティング

TeamCity での CSRF 保護に関する問題に直面した場合(たとえば、サーバーから「 CSRF チェックに失敗したために 403 ステータスコードで応答しています」という応答が表示される場合)、次の手順を試すことができます。

  • 2020.1 より前の TeamCity バージョンでの動作と同様に、teamcity.csrf.paranoid=false 内部プロパティを設定して、CORS 操作の Origin/Referer ヘッダーの検証を強制します(詳細については、アップグレードノートを参照してください)。

  • teamcity.csrf.origin.check.enabled=logOnly 内部プロパティを設定して、CSRF 保護を一時的に無効にします。

  • 失敗した CSRF 試行に関する情報は、TeamCity/logs/teamcity-auth.log ファイルに記録されます。リクエストのより詳細な診断を行うには、debug-auth ロギングプリセットを有効にします。

リストされている手順のいずれも問題の解決に役立たない場合は、サポート(英語)に連絡し、teamcity-auth.log ログに有効な teamcity-auth ロギングプリセットを提供してください。