CORSの作業
Cross-Origin Resource Sharing (CORS)は、ヘッダーベースのプロトコルで、JavaScriptがユーザーにかわってリクエストを行い、別のドメインのリソースにアクセスできるようにします。クラウド・ゲートを構成して、CORSを有効にし、アプリケーション・ゲートウェイまたはIAMアイデンティティ・ドメインで実行されているクラウド・ゲートのCORS設定を適用します。
CORSは、不正JavaScript(たとえば、広告を使用して攻撃者によってサイトに配置される)がユーザーにかわってAJAXリクエストを作成するのを防ぐのに役立ちます。詐欺的なAJAXリクエストは、あなたの銀行からお金を引き出すか、オンラインショッピングサイトであなたの名前で購入することができます。これらのサイトとのアクティブなセッションが現在ある場合、これらのリクエストは成功する可能性があります。CORSは、サーバーが正しいレスポンス・ヘッダー・セットで応答しない場合、ブラウザでJavaScriptがレスポンスを表示(またはアクセス)できないことを規定しています。
- domain - たとえば、
site1.oraclecloud.comはoracle.comをコールします。 - サブドメイン- たとえば、
site1.oraclecloud.comはsite7.oraclecloud.comをコールします - port - たとえば、
site1.oraclecloud.comはsite1.oraclecloud.com:3030をコールします。 - protocol - たとえば、
https://site1.oraclecloud.comはhttp://site1.oraclecloud.comをコールします。
CORS要求には、単純なCORS要求またはプリフライトCORS要求の2つの形式があります。
簡易CORS要求
- このメソッドは次のいずれかです。
GETPOSTHEAD
- 簡易CORSリクエストに手動で追加できるHTTPヘッダーは、次のとおりです。
AcceptAccept-LanguageContent-LanguageContent-TypeDPRDownlinkSave-DataViewport-WidthWidth
Content-Typeが設定されている場合は、次のようにする必要があります。application/x-www-form-urlencodedmultipart/form-datatext/plain
プリフライトCORS要求
JavaScriptリクエストが単純なCORSリクエストの特性を満たさない場合、プリフライトCORSリクエストが他のドメインにあるリソースに送信されます。
Preflight CORS Requestは、プリフライト要求フローがトリガーされたデータを含む要求に特定のHTTPヘッダーを含めることによって、実際の要求をそのリソースに送信できるかどうかをテストします。つまり、JavaScript HTTPリクエストで、Preflight CORSリクエストを必要とするメソッド/ヘッダーがHTTPリクエストに指定されていた場合、Preflight CORSリクエストは、リソースにそれらのメソッド/ヘッダーを問い合せて、リソースがそのようなクロスドメイン・リクエストを受け入れるかどうかを確認します。
Cloud Gate CORS構成プロパティおよび属性
| CORSプロパティ | 説明 |
|---|---|
cloudGateCorsEnabled |
テナンシのCloud Gate CORSサポートをオンにするブール・プロパティ。この設定は、
デフォルトは ベストプラクティス。 |
cloudGateCorsAllowedOrigins |
プロパティは、許可されたCORSオリジンのリストを含む文字列配列です。 デフォルトは空の配列です。 すべてのCORSリクエストは、そのソースまたはオリジンをオリジン・リクエスト・ヘッダーで指定します。オリジン・ヘッダーの値がこのリストと一致します。 Originが一致すると、Cloud Gateは適切なCORSヘッダーをレスポンスに追加します。 オリジンが一致しない場合、Cloud GateはCORSレスポンス・ヘッダーを返さないため、レスポンスはブラウザによって拒否されます。 入力テンプレートで許可されるCORS値:
例:
|
cloudGateCorsAllowNullOrigin |
ブラウザが"null"オリジンを送信するシナリオをサポートするブール・プロパティ。この設定は、 デフォルトは CORS要求がユーザーのコンピュータ上のファイルからのものである場合、またはサーバーがCORS要求に応答して別のサーバーにリダイレクトする場合に、nullオリジンが送信されます。オリジンが"tainted"とみなされると、ブラウザは"null"オリジンを渡します。セキュリティを強化するために、デフォルトでは"null"の起点は許可されません。 一部の"null"の起点が有効です。アイデンティティ・ドメインのOpenID Connect (OIDC)ブラウザ・フロー・ログインを利用するアプリケーションでは、Cloud Gateノードに送信される「null」のオリジンが表示されます。Cloud Gateがアイデンティティ・ドメインにリダイレクトしてOIDCブラウザ・ログインを開始すると、アイデンティティ・ドメインがリクエストをCloud Gateにリダイレクトすると、オリジンがnullになります。 |
cloudGateCorsMaxAge |
クライアント(ブラウザ)がプリフライト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は常に、Varyレスポンス・ヘッダーがレスポンスの一部であり、オリジン・ヘッダーが含まれていることを確認します。これは、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リクエスト・ヘッダーによって、プリフライトCORSリクエストとして識別されます。 cloudGateCorsEnabledがtrueの場合、アプリケーションはCORSを実装できるように、リクエストはアップストリーム・アプリケーション・サーバーに移動できます。cloudGateCorsEnabledがfalseの場合、古いisCorsAllowedWeb層ポリシー設定は引き続き適用されます(リクエスト処理の直後)。- Cloud Gateからレスポンスが返される前に、CORSはCloud Gate CORS設定で定義されたとおりに適用されます。
- Cloud Gateは常に、Varyレスポンス・ヘッダーがレスポンスの一部であり、オリジン・ヘッダーが含まれていることを確認します。これは、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はレスポンスを返します。