CORSの作業
Cross-Origin Resource Sharing (CORS)は、JavaScriptがかわりにリクエストを行って別のドメイン内のリソースにアクセスできるようにするヘッダーベースのプロトコルです。CORSを有効にし、アプリケーション・ゲートウェイまたはIAMアイデンティティ・ドメインで実行されているCloud GateのCORS設定を強制するようにCloud Gateを構成します。
CORSは、不正なJavaScript (広告などを使用して攻撃者がサイトに配置)がユーザーのかわりにAJAXリクエストを行わないようにするのに役立ちます。不正なAJAXリクエストは、銀行からお金を引き出すか、オンラインショッピングサイトであなたの名前で購入することができます。これらのサイトとのアクティブなセッションが現在ある場合、これらのリクエストは成功する可能性があります。CORSは、サーバーが正しいレスポンス・ヘッダー・セットで応答しない場合、ブラウザはJavaScriptがレスポンスを表示(またはアクセス)できないことを規定しています。
- ドメイン- たとえば、
site1.oraclecloud.com
はoracle.com
をコールします - サブドメイン- たとえば、
site1.oraclecloud.com
はsite7.oraclecloud.com
をコールします - ポート- たとえば、
site1.oraclecloud.com
はsite1.oraclecloud.com:3030
をコールします - プロトコル- たとえば、
https://site1.oraclecloud.com
はhttp://site1.oraclecloud.com
をコールします
CORS要求には、Simple CORS要求またはPreflight CORS要求の2つの形式があります。
簡易CORS要求
- 方法は次のとおりです。
GET
POST
HEAD
- Simple CORSリクエストに手動で追加できるHTTPヘッダーは次のとおりです。
Accept
Accept-Language
Content-Language
Content-Type
DPR
Downlink
Save-Data
Viewport-Width
Width
Content-Type
が設定されている場合は、次のようにする必要があります。application/x-www-form-urlencoded
multipart/form-data
text/plain
プリフライトCORS要求
JavaScriptリクエストがSimple CORSリクエストの特性を満たしていない場合、Preflight CORSリクエストはもう一方のドメインにあるリソースに送信されます。
Preflight CORS Requestは、プリフライト・リクエスト・フローがトリガーされるデータを含むリクエストに特定のHTTPヘッダーを含めることで、実際のリクエストをそのリソースに送信できるかどうかをテストします。つまり、JavaScript HTTPリクエストで、Preflight CORSリクエストを必要とするいくつかのメソッド/ヘッダーを指定した場合、Preflight CORSリクエストは、リソースにこれらのメソッド/ヘッダーを問い合せて、リソースがそのようなクロスドメイン・リクエストを受け入れるかどうかを確認します。
Cloud Gate CORS構成プロパティおよび属性
CORSプロパティ | 説明 |
---|---|
cloudGateCorsEnabled |
テナンシのCloud Gate CORSサポートをオンにするブール・プロパティ。この設定は、
デフォルトは ベスト・プラクティス |
cloudGateCorsAllowedOrigins |
プロパティは、許可されるCORSオリジン・リストを含む文字列配列です。 デフォルトは空の配列です。 各CORSリクエストは、オリジン・リクエスト・ヘッダーにソースまたはオリジンを指定します。オリジン・ヘッダーの値がこのリストと一致します。 オリジンが一致した場合、Cloud Gateは適切なCORSヘッダーをそのレスポンスに追加します。 オリジンが一致しない場合、Cloud GateはCORSレスポンス・ヘッダーを返さず、ブラウザによってレスポンスが拒否されます。 入力テンプレートで許可されるCORS値:
例:
|
cloudGateCorsAllowNullOrigin |
ブラウザがnullのオリジンを送信するシナリオをサポートするブール・プロパティ。この設定は、 デフォルトは CORSリクエストがユーザーのコンピュータ上のファイルからのものである場合、またはCORSリクエストに応答してサーバーが別のサーバーにリダイレクトされる場合、nullのオリジンが送信されます。ブラウザは、オリジンが「終了済」とみなされると、「null」のオリジンを渡します。セキュリティを強化するために、デフォルトでは「null」のオリジンは許可されません。 nullの起点は有効です。アイデンティティ・ドメインのOpenID Connect (OIDC)ブラウザ・フロー・ログインを利用するアプリケーションでは、Cloud Gateノードに送信される「null」のオリジンが表示されます。Cloud Gateがアイデンティティ・ドメインにリダイレクトすると、OIDCブラウザ・ログインを開始するエンドポイントが認可され、アイデンティティ・ドメインがリクエストをCloud Gateにリダイレクトすると、オリジンがnullになります。 |
cloudGateCorsMaxAge |
クライアント(ブラウザ)がPreflight CORSレスポンスをキャッシュできる秒数を指定する整数。 |
cloudGateCorsExposedHeaders |
このプロパティは、 デフォルトは空の配列です。 |
アイデンティティ・ドメインでのCloud Gate CORS設定の構成
Cloud Gateでは、Cross-Origin Resource Sharing (CORS)サポート用にアイデンティティ・ドメインで次の設定を構成する必要があります。
isCorsAllowed
設定がtrue
に構成されている場合、Cloud Gateでは保護アプリケーションへのCORSリクエストのプリフライトが許可されます。 必要なCloud Gateの最小バージョンは21.1.2です。
/admin/v1/Settings/Settings
エンドポイントを使用して、CORS設定を構成します。リクエストはpatch
操作です。詳細は、「設定の更新」を参照してください。
簡易およびプリフライトCORS要求ワークフロー
Cross-Origin Resource Sharing (CORS)リクエスト・ワークフローの概要。
簡易CORS要求ワークフロー
- リクエストは、オリジン・リクエスト・ヘッダーの存在によってCORSリクエストとして識別されます。
- 必要に応じて(キャッシュ失効など)、Cloud Gate CORS設定がIAMのアイデンティティ・ドメインからダウンロードされます。
- Cloud Gateはリクエストを処理します。リクエストを拒否するか、アップストリーム・アプリケーション・サーバーまでリクエストを許可します。
- レスポンスが返される前に、Cloud Gateは、Cloud Gate CORS設定で定義されたCORSを強制します。
- Cloud Gateでは、常に、変更レスポンス・ヘッダーがレスポンスの一部であり、「元の」ヘッダーが含まれていることが保証されます。これは、CORS以外のリクエストでも発生します。
cloudGateCorsEnabled
がfalse
の場合、処理はここで終了します。レスポンスはそのまま返されます。- Cloud Gateは、「許可されたオリジン」の構成済リストを使用して、オリジンが許可されていることを確認します。
オリジンが許可されていない場合、サポートされているすべてのCORSレスポンス・ヘッダーがレスポンスから取り除かれ、処理が終了します。
Access-Control-Allow-Origin
レスポンス・ヘッダーが追加され、オリジン・リクエスト・ヘッダーの値に構成されます。Access-Control-Allow-Credentials
レスポンス・ヘッダーが追加され、true
に構成されます。Access-Control-Expose-Headers
は、cloudGateCorsExposedHeaders
値と、レスポンスで返されるヘッダーのリストとの交差で構成されます。Access-Control-Allow-Methods
、Access-Control-Allow-Headers
およびAccess-Control-Max-Age Response Headers
がレスポンスから削除されます。
- Cloud Gateはレスポンスを返します。
Cloud Gateは、アップストリーム・アプリケーション・サーバーによって設定されている場合、Access-Control-Allow-Origin
およびAccess-Control-Allow-Credentials Response
ヘッダーを上書きします。
CORS要求ワークフローのプリフライト
- リクエストは、オリジン・リクエスト・ヘッダーの存在によってCORSリクエストとして識別されます。
- 必要に応じて(キャッシュ失効など)、Cloud Gate CORS設定がIAMのアイデンティティ・ドメインからダウンロードされます。
- リクエストは、オリジン・リクエスト・ヘッダーに加えて、OPTIONSメソッドおよび
Access-Control-Request-Method
リクエスト・ヘッダーによってPreflight CORSリクエストとして識別されます。 cloudGateCorsEnabled
がtrue
の場合、アプリケーションはCORSを実装できるように、リクエストはアップストリーム・アプリケーション・サーバーを通過できます。cloudGateCorsEnabled
がfalse
の場合、古いisCorsAllowed
Web層ポリシー設定は引き続き適用されます(リクエスト処理の後半)。- Cloud Gateからレスポンスが返される前に、CORSはCloud Gate CORS設定で定義されたとおりに強制されます。
- Cloud Gateでは、常に、変更レスポンス・ヘッダーがレスポンスの一部であり、「元の」ヘッダーが含まれていることが保証されます。これは、nonCORSリクエストでも発生します。
cloudGateCorsEnabled
がfalse
の場合、処理はここで終了します。レスポンスはそのまま返されます。- Cloud Gateは、「許可されたオリジン」の構成済リストを使用して、オリジンが許可されていることを確認します。
オリジンが許可されていない場合、サポートされているすべてのCORSレスポンス・ヘッダーがレスポンスから取り除かれ、処理が終了します。
Access-Control-Allow-Origin
レスポンス・ヘッダーが追加され、オリジン・リクエスト・ヘッダーの値に構成されます。Access-Control-Allow-Credentials
レスポンス・ヘッダーが追加され、true
に構成されます。- アップストリーム・アプリケーション・サーバーが
Access-Control-Allow-Methods
レスポンス・ヘッダーを追加しなかった場合、Cloud Gateは値を次のように構成します。- 「レスポンスの許可」ヘッダーがレスポンスに含まれている場合、Cloud Gateはその値を使用します。
Access-Control-Request-Method
リクエスト・ヘッダーがリクエストで見つかった場合、Cloud Gateはその値を使用します。
- アップストリーム・アプリケーション・サーバーが
Access-Control-Allow-Headers
レスポンス・ヘッダーを追加しなかった場合、Cloud GateはリクエストにAccess-Control-Request-Headers
リクエスト・ヘッダーの値(存在する場合)を使用します。 cloudGateCorsMaxAge
がゼロより大きい値に構成されている場合、Access-Control-Max-Age
レスポンス・ヘッダーが追加され、最大経過時間値に構成されます。cloudGateCorsMaxAge
値が0以下の場合、Access-Control-Max-Age
レスポンス・ヘッダーに対するアクションは実行されません。Access-Control-Expose-Headers
レスポンス・ヘッダーが削除されます。Preflight Responsesには適用されません。
- Cloud Gateはレスポンスを返します。