クロスオリジンリソース共有 (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はウェブブラウザに対して、データをリクエストしたサイトでレスポンスを使用できることを通知します。