CORSの作業
Cross-Origin Resource Sharing (CORS)は、JavaScriptがかわりに別のドメインのリソースにアクセスするようにリクエストできるようにするヘッダーベースのプロトコルです。Cloud Gateを構成して、CORSを有効にし、アプリケーション・ゲートウェイまたはIAMアイデンティティ・ドメインで実行されているCloud Gateの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をコールします。 - プロトコル- たとえば、
https://site1.oraclecloud.comはhttp://site1.oraclecloud.comをコールします
CORS要求には、単純なCORS要求とプリフライトCORS要求の2つの形式があります。
単純なCORSリクエスト
- このメソッドは、次のいずれかです。
GETPOSTHEAD
- Simple CORSリクエストに手動で追加できるHTTPヘッダーは、次のとおりです。
AcceptAccept-LanguageContent-LanguageContent-TypeDPRDownlinkSave-DataViewport-WidthWidth
Content-Typeを設定する場合は、次のようにする必要があります。application/x-www-form-urlencodedmultipart/form-datatext/plain
プレフライトCORS要求
JavaScriptリクエストがSimple CORSリクエストの特性を満たさない場合、Preflight CORSリクエストがもう一方のドメインにあるリソースに送信されます。
Preflight CORS Requestは、プリフライト・リクエスト・フローがトリガーされた結果となったデータを含むリクエストに特定のHTTPヘッダーを含めることで、実際のリクエストをそのリソースに送信できるかどうかをテストします。つまり、JavaScript HTTPリクエストで、Preflight CORSリクエストが必要なメソッド/ヘッダーがHTTPリクエストに指定されている場合、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」オリジンが送信されます。ブラウザは、Originが"tainted"とみなされると、"null" Originを渡します。セキュリティを強化するために、デフォルトでは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です。
CORS設定を構成するには、/admin/v1/Settings/Settingsエンドポイントを使用します。リクエストは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ヘッダーを上書きします。
Preflight 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は常に、可変レスポンス・ヘッダーがレスポンスの一部であり、元のヘッダーが含まれていることを確認します。これは、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が0より大きい値に構成されている場合、Access-Control-Max-Ageレスポンス・ヘッダーが追加され、最大経過時間値に構成されます。cloudGateCorsMaxAge値が0以下の場合、Access-Control-Max-Ageレスポンス・ヘッダーに対するアクションは実行されません。Access-Control-Expose-Headersレスポンス・ヘッダーが削除されます。Preflight Responsesには適用されません。
- Cloud Gateはレスポンスを返します。