クロスオリジンリソース共有 (CORS)
クロスオリジンリソース共有 (CORS)
クロスオリジンリソース共有 (CORS) は、悪意のあるウェブサイトが明示的な権限を持たずに他のサイトのデータ (Box APIなど) にアクセスするのを防ぐために、ウェブブラウザで利用されているセキュリティメカニズムです。
CORSの全般的な情報の詳細については、MDN Web Docsを参照してください。
CORSのしくみ
あるドメイン (company.com
など) のブラウザで、別のドメイン (box.com
) から画像、ファイル、またはAPIリソースを取得しようとする場合、適切なCORSヘッダーが存在しない限り、そのウェブブラウザにより、これらのアセットへのアクセスが阻止されます。
ブラウザからクロスオリジンリクエストを送信すると、そのリクエストを送信するサイトのドメインを含むOrigin
リクエストヘッダーがリクエストとともに渡されます。このヘッダーは変更できないた め、ウェブブラウザのセキュリティにとって重要な部分となります。
デフォルトでは、Access-Control-Allow-Origin
レスポンスヘッダーが存在しない場合、ブラウザは、別のドメインから読み込まれたアセットを受け入れることはありません。Boxなどのサーバーは、そのサーバー上のリソースへのアクセスが許可されたドメインのリストを明示的に取得することも、APIへのアクセスを任意のドメインに許可するために*
値を返すこともできます。
BoxでのCORSの使用方法
Boxは、Origin
リクエストヘッダーとAccess-Control-Allow-Origin
レスポンスヘッダーを使用して、開発者が定義したCORSルールを適用します。
Origin
ヘッダーの検証
Box APIは、アプリケーション開発者が設定した、許可されたドメインのリストに対してOrigin
リクエストヘッダーを検証します。許可されたオリジンは複数設定でき、リストにないオリジンはHTTP 403
エラーで返されます。
{
"type": "error",
"status": 403,
"code": "cors_origin_not_whitelisted",
"context_info": {
"origin": "https://company.com"
},
"help_url": "https://developer.box.com/guides/api-calls/permissions-and-errors/common-errors/",
"message": "Access denied - Did you forget to safelist your origin in the CORS config of your app?",
"request_id": "4dsdfsa832213"
}
オリジンが設定されていない場合は、このアプリケーションのBox APIに対するすべてのリクエストでエラーが返されます。
Access-Control-Allow-Origin
レスポンスヘッダー
Box APIは、Origin
ヘッダーを検証した後、リクエストされたデータのほか、値*
が設定されたOrigin
レスポンスヘッダーを返します。
HTTP/1.1 200 OK
Date: Wed, 23 Sep 2020 14:07:29 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Strict-Transport-Security: max-age=31536000
Cache-Control: no-cache, no-store
Access-Control-Allow-Origin: *
Vary: Origin
BOX-REQUEST-ID: 032cfb446dae4fd0b4c2bff80a1a97ba7
このヘッダーを返すことにより、Box APIはウェブブラウザに対して、データをリクエストしたサイトでレスポンスを使用できることを通知します。
ドメインのCORSの有効化
アプリケーションが動作するドメインでCORSを有効にするには、開発者コンソールに移動して、アプリケーションを選択し、[構成] パネルの一番の下までスクロールして [CORSドメイン] の設定を見つけます。
アプリケーションでのAPIリクエストの発信元になると予想されるすべてのオリジンを コンマ区切りリストとして追加します。ドメインにはスキーマ (http
またはhttps
) が必要で、*.example.com
のようにサブドメインのワイルドカードを含めることができます。
サイトが非標準のポート上で動作する場合は、サイトにそのポートも含める必要があります。これは、特に、localhost
または127.0.0.1
で動作しているサイトに当てはまります。
オリジンのリストの例は、次のようになります。
https://company.com,https://*.internal.company.com,http://localhost:3000
CORSのデバッグ
Box APIに対してAPIコールを実行した場合に発生する可能性のあるCORSエラーはいくつかあります。
HTTP 403
- 許可済みオリジンが定義されていない
オリジンのリストを指定した後でも、このエラーが発生する場合があります。多くの場合、指定したオリジンに誤字があることが原因です。
- オリジンを確認する - 開発者コンソールに戻り、オリジンがAPIコールの実行元のサイトをマップしていることを確認します。オリジンにはスキーム (
http(s)
) が含まれても、パスまたは末尾の/
は含まれないことに注意してください。ブラウザのデバッグコンソールを使用してページを調査し、Origin