Cloud API を呼び出すときに XSRF チェックに失敗した
プラットフォームについて: Cloud のみ - この記事は、 クラウド プラットフォームのアトラシアン製品にのみ適用されます。
問題
リクエストが「XSRF チェックに失敗しました」という内容のエラーで失敗します。
診断
Atlassian Cloud REST API は、セキュリティ上の理由で Cross-site Request Forgery (XSRF/CSRF) 攻撃から保護されています。このため、他のシステムからのリクエストが Atlassian Cloud の外部から送信された場合、下記に示すように 403 ステータス コードで拒否されることがあります。
$ curl -u admin:admin -X POST -i "https://xxxx.atlassian.net/example/api/action?username=testUser"
HTTP/1.1 403 Forbidden
Date: Fri, 06 May 2016 06:11:15 GMT
...
XSRF check failed. More information at https://confluence.atlassian.com/x/DhpJMQ
この例では、admin
という操作を実行しようとしましたが、XSRF 保護のために失敗しました。
ソリューション
外部システムから保護された API を呼び出すには、各リクエストに X-Atlassian-Token
ヘッダーを追加し、値を no-check
に設定します。リクエストにこのヘッダーを追加することで、サーバー側の XSRF チェックを迂回し、リクエストを実現できます。
$ curl -u admin:admin -X POST -i "https://xxxx.atlassian.net/example/api/action?username=testUser" -H "X-Atlassian-Token: no-check"
HTTP/1.1 200 OK
Date: Fri, 06 May 2016 06:13:31 GMT
...
この方法はコマンドライン ツールまたは外部システムによるリクエストにのみ可能で、ブラウザーのリクエストには使用できません。その理由は、オリジン間リソース共有の仕様で、サードパーティの Web サイトに読み込まれた JavaScript が任意のリクエスト ヘッダーを設定することが許可されていないためです。
保護された REST API をサードパーティの Web サイトから呼び出す方法
保護された API をサードパーティの Web サイトから呼び出すことはできません。セキュリティ上のリスクが生じるためです。