CORSサポートをAPIデプロイメントに追加
リクエスト・ポリシーを使用してCORSサポートをAPIゲートウェイでAPIデプロイメントに追加する方法をご紹介します。
Webブラウザは通常、「同一生成元ポリシー」を実装して、コードが提供されたものとは異なるオリジンに対してリクエストを行わないようにします。同一生成元ポリシーの意図は、悪質なWebサイトからの保護を提供することです。ただし、同一生成元ポリシーは、既知および信頼できるオリジンのサーバーとクライアント間の正当な相互作用を妨げる可能性もあります。
Cross-Origin Resource Sharing (CORS)は、Webページのコードで別のオリジンから提供されるREST APIを使用できるようにすることで、同一生成元ポリシーを緩和するオリジン間の共有標準です。CORS標準では、追加のHTTPリクエスト・ヘッダーとレスポンス・ヘッダーを使用して、アクセス可能なオリジンを指定します。
また、CORS標準では、特定のHTTPリクエスト・メソッドのためにリクエストが「プリフライト」である必要もあります。実際のリクエストを送信する前に、Webブラウザは、実際のリクエスト内のメソッドがサポートされるかどうかを決定するために、プリフライト・リクエストをサーバーに送信します。サーバーは、実際のリクエストで許可されるメソッドで応答します。Webブラウザは、サーバーからのレスポンスが実際のリクエストのメソッドを許可したことを示している場合のみ、実際のリクエストを送信します。CORS標準では、サーバーがリクエストに資格証明(cookie、認可ヘッダーまたはTLSクライアント証明書)が含まれるかどうかをクライアントに通知することもできます。
CORSの詳細は、W3CやMozillaからオンラインで入手可能なリソースを参照してください。
APIゲートウェイ・サービスを使用して、APIゲートウェイにデプロイするAPIでCORSサポートを有効にできます。APIデプロイメントでCORSサポートを有効にすると、APIデプロイメントのHTTPプリフライト・リクエストおよび実際のリクエストにより、1つ以上のCORSレスポンス・ヘッダーがAPIクライアントに返されます。CORSレスポンス・ヘッダーの値は、APIデプロイメント仕様で設定します。
リクエスト・ポリシーを使用して、CORSサポートをAPIに追加します(APIデプロイメント仕様へのリクエスト・ポリシーとレスポンス・ポリシーの追加を参照)。CORSリクエスト・ポリシーは、APIデプロイメント仕様のすべてのルート、または特定のルートのみにグローバルに適用できます。
次を実行して、CORSリクエスト・ポリシーをAPIデプロイメント仕様に追加できます:
- コンソールの使用
- JSONファイルの編集
コンソールを使用したCORSリクエスト・ポリシーの追加
コンソールを使用してCORSリクエスト・ポリシーをAPIデプロイメント仕様に追加するには:
-
コンソールを使用してAPIデプロイメントを作成し、「最初から」オプションを選択して、「基本情報」ページで詳細を入力します。
詳細は、APIデプロイメントの作成によるAPIゲートウェイへのAPIのデプロイおよびAPIゲートウェイの更新を参照してください。
-
「基本情報」ページの「APIリクエスト・ポリシー」セクションで、CORS」の横の「追加」ボタンを選択し、次を指定します:
-
許可されるオリジン: APIデプロイメントへのアクセスが許可されているオリジン。たとえば、
https://oracle.com
です。「+別のオリジン」を選択して、2番目以降のオリジンを入力します。 -
許可されるメソッド: APIデプロイメントへの実際のリクエストで許可される1つ以上のメソッド。たとえば、
GET, PUT
です。 - 許可されるヘッダー: オプションで、APIデプロイメントへの実際のリクエストで許可されるHTTPヘッダー。たとえば、
opc-request-id
またはIf-Match
です。「+別のヘッダー」を選択し、2番目以降のヘッダーを入力します。 - 公開ヘッダー: オプションで、APIクライアントが実際のリクエストに対するAPIデプロイメントのレスポンスでアクセスできるHTTPヘッダー。たとえば、
ETag
またはopc-request-id
です。「+別のヘッダー」を選択し、2番目以降のヘッダーを入力します。 -
最大経過時間(秒): オプションで、プリフライト・リクエストの結果をブラウザでキャッシュできる期間(デルタ秒)を示す整数値。値を指定しない場合、デフォルトは
0
です。 - 資格証明の許可の有効化: APIデプロイメントへの実際のリクエストを、資格証明(cookie、認可ヘッダーまたはTLSクライアント証明書)を使用して行えるかどうか。デフォルトでは、このオプションは選択されていません。
CORSリクエスト・ポリシーの様々なフィールドを異なるCORSレスポンス・ヘッダーにマップする方法の詳細は、CORSリクエスト・ポリシーからCORSレスポンスへのマップ方法を参照してください。
-
許可されるオリジン: APIデプロイメントへのアクセスが許可されているオリジン。たとえば、
-
「変更の適用」を選択します。
-
「次へ」を選択して、「認証」ページで認証オプションを指定します。
認証オプションの詳細は、APIデプロイメントへの認証と認可の追加を参照してください。
-
「次」を選択して、「ルート」ページのAPIデプロイメント内の個々のルートの詳細を入力します。個々のルートに適用するCORSリクエスト・ポリシーを指定するには、「リクエスト・ポリシーのルーティングを表示」を選択し、「CORS」の横にある「追加」ボタンを選択して、次を指定します:
-
許可されるオリジン: ルートへのアクセスが許可されているオリジン。たとえば、
https://oracle.com
です。「+別のオリジン」を選択して、2番目以降のオリジンを入力します。 -
許可されるメソッド: ルートへの実際のリクエストで許可される1つ以上のメソッド。たとえば、
GET, PUT
です。 - 許可されるヘッダー: オプションで、ルートへの実際のリクエストで許可されているHTTPヘッダー。たとえば、
opc-request-id
またはIf-Match
です。「+別のヘッダー」を選択し、2番目以降のヘッダーを入力します。 - 公開ヘッダー: オプションで、APIクライアントが実際のリクエストに対するAPIデプロイメントのレスポンスでアクセスできるHTTPヘッダー。たとえば、
ETag
またはopc-request-id
です。「+別のヘッダー」を選択し、2番目以降のヘッダーを入力します。 -
最大経過時間(秒): オプションで、プリフライト・リクエストの結果をブラウザでキャッシュできる期間(デルタ秒)を示す整数値。値を指定しない場合、デフォルトは
0
です。 - 資格証明の許可の有効化: ルートへの実際のリクエストを、資格証明(cookie、認可ヘッダーまたはTLSクライアント証明書)を使用して行えるかどうか。デフォルトでは、このオプションは選択されていません。
CORSリクエスト・ポリシーの様々なフィールドを異なるCORSレスポンス・ヘッダーにマップする方法の詳細は、CORSリクエスト・ポリシーからCORSレスポンスへのマップ方法を参照してください。
-
許可されるオリジン: ルートへのアクセスが許可されているオリジン。たとえば、
- 「変更の適用」を選択し、「次」を選択して、APIデプロイメントおよび個々のルートに入力した詳細を確認します。
- APIデプロイメントを作成または更新するには、「作成」または「変更の保存」を選択します。
- (オプション) コールしてAPIが正常にデプロイされていることを確認します(APIゲートウェイにデプロイされたAPIのコールを参照)。
JSONファイルの編集によるCORSリクエスト・ポリシーの追加
CORSリクエスト・ポリシーをJSONファイル内のAPIデプロイメント仕様に追加するには:
-
任意のJSONエディタを使用して、CORSサポートを追加する既存のAPIデプロイメント仕様を編集するか、新しいAPIデプロイメント仕様を作成します(APIデプロイメント仕様の作成を参照)。
たとえば、次の基本的なAPIデプロイメント仕様では、OCI Functionsの単純なHello Worldサーバーレス・ファンクションを単一のバック・エンドとして定義しています:
{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
-
APIデプロイメント内のすべてのルートにグローバルに適用するCORSリクエスト・ポリシーを指定するには:
-
routes
セクションの前にrequestPolicies
セクションを挿入します(まだ存在しない場合)。例:{ "requestPolicies": {}, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
-
次の
cors
ポリシーを新しいrequestPolicies
セクションに追加して、APIデプロイメント内のすべてのルートにグローバルに適用します:{ "requestPolicies": { "cors":{ "allowedOrigins": [<list-of-origins>], "allowedMethods": [<list-of-methods>], "allowedHeaders": [<list-of-implicit-headers>], "exposedHeaders": [<list-of-exposed-headers>], "isAllowCredentialsEnabled": <true|false>, "maxAgeInSeconds": <seconds> } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
ここでは:
"allowedOrigins": [<list-of-origins>]
は、APIデプロイメントへのアクセスが許可されているオリジンの必須のカンマ区切りリストです。たとえば、, "allowedOrigins": ["*", "https://oracle.com"]
です"allowedMethods": [<list-of-methods>]
は、APIデプロイメントへの実際のリクエストで許可されるHTTPメソッドのオプションのカンマ区切りリストです。たとえば、"allowedMethods": ["*", "GET"]
です"allowedHeaders": [<list-of-implicit-headers>]
は、APIデプロイメントへの実際のリクエストで許可されるHTTPヘッダーのオプションのカンマ区切りリストです。たとえば、"allowedHeaders": ["opc-request-id", "If-Match"]
です"exposedHeaders": [<list-of-exposed-headers>]
は、実際のリクエストに対するAPIデプロイメントのレスポンスでAPIクライアントがアクセスできる、HTTPヘッダーのオプションのカンマ区切りリストです。たとえば、"exposedHeaders": ["ETag", "opc-request-id"]
です"isAllowCredentialsEnabled": <true|false>
は、資格証明(cookie、認可ヘッダーまたはTLSクライアント証明書)を使用してAPIデプロイメントへの実際のリクエストを行うことができるかどうかを示すtrue
またはfalse
です。指定しない場合、デフォルトはfalse
です。"maxAgeInSeconds": <seconds>
は、プリフライト・リクエストの結果をブラウザでキャッシュできる期間(デルタ秒)を示す整数値です。指定しない場合、デフォルトは0
です。
例:
{ "requestPolicies": { "cors":{ "allowedOrigins": ["*", "https://oracle.com"], "allowedMethods": ["*", "GET"], "allowedHeaders": [], "exposedHeaders": [], "isAllowCredentialsEnabled": false, "maxAgeInSeconds": 3000 } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
CORSリクエスト・ポリシーの様々なフィールドを異なるCORSレスポンス・ヘッダーにマップする方法の詳細は、CORSリクエスト・ポリシーからCORSレスポンスへのマップ方法を参照してください。
-
-
個々のルートに適用するCORSリクエスト・ポリシーを指定するには:
-
ポリシーを適用するルートのバックエンド・セクションの後に
requestPolicies
セクションを挿入します。例:{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": {} } ] }
- 次の
cors
ポリシーを新しいrequestPolicies
セクションに追加して、この特定のルートのみに適用します:{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "cors":{ "allowedOrigins": [<list-of-origins>], "allowedMethods": [<list-of-methods>], "allowedHeaders": [<list-of-implicit-headers>], "exposedHeaders": [<list-of-exposed-headers>], "isAllowCredentialsEnabled": <true|false>, "maxAgeInSeconds": <seconds> } } } ] }
ここでは:
"allowedOrigins": [<list-of-origins>]
は、APIデプロイメントへのアクセスが許可されているオリジンの必須のカンマ区切りリストです。たとえば、, "allowedOrigins": ["*", "https://oracle.com"]
です"allowedMethods": [<list-of-methods>]
は、APIデプロイメントへの実際のリクエストで許可されるHTTPメソッドのオプションのカンマ区切りリストです。たとえば、"allowedMethods": ["*", "GET"]
です"allowedHeaders": [<list-of-implicit-headers>]
は、APIデプロイメントへの実際のリクエストで許可されるHTTPヘッダーのオプションのカンマ区切りリストです。たとえば、"allowedHeaders": ["opc-request-id", "If-Match"]
です"exposedHeaders": [<list-of-exposed-headers>]
は、実際のリクエストに対するAPIデプロイメントのレスポンスでAPIクライアントがアクセスできる、HTTPヘッダーのオプションのカンマ区切りリストです。たとえば、"exposedHeaders": ["ETag", "opc-request-id"]
です"isAllowCredentialsEnabled": <true|false>
は、資格証明(cookie、認可ヘッダーまたはTLSクライアント証明書)を使用してAPIデプロイメントへの実際のリクエストを行うことができるかどうかを示すtrue
またはfalse
です。指定しない場合、デフォルトはfalse
です。"maxAgeInSeconds": <seconds>
は、プリフライト・リクエストの結果をブラウザでキャッシュできる期間(デルタ秒)を示す整数値です。指定しない場合、デフォルトは0
です。
例:
{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "cors":{ "allowedOrigins": ["*", "https://oracle.com"], "allowedMethods": ["*", "GET"], "allowedHeaders": [], "exposedHeaders": [], "isAllowCredentialsEnabled": false, "maxAgeInSeconds": 3000 } } } ] }
CORSリクエスト・ポリシーの様々なフィールドを異なるCORSレスポンス・ヘッダーにマップする方法の詳細は、CORSリクエスト・ポリシーからCORSレスポンスへのマップ方法を参照してください。
-
- APIデプロイメント仕様を含むJSONファイルを保存します。
-
APIデプロイメント仕様は、次の方法でAPIデプロイメントを作成または更新するときに使用します:
- JSONファイルをコンソールで「既存のAPIのアップロード」オプションで指定します
- APIゲートウェイREST APIへのリクエストでJSONファイルを指定します
詳細は、APIデプロイメントの作成によるAPIゲートウェイへのAPIのデプロイおよびAPIゲートウェイの更新を参照してください。
- (オプション) コールしてAPIが正常にデプロイされていることを確認します(APIゲートウェイにデプロイされたAPIのコールを参照)。
CORSリクエスト・ポリシーからCORSレスポンスへのマップ方法
次の表に示すように、CORSリクエスト・ポリシーの様々なフィールドを異なるCORSレスポンス・ヘッダーにマップします:
フィールド | CORSレスポンス・ヘッダーへのマップ | プリフライト・リクエストに対するレスポンスに含まれます | 実際のリクエストへのレスポンスに含まれます | ノート |
---|---|---|---|---|
allowed Origins
|
Access-Control-Allow-Origin | はい | はい |
必須: はい データ型: string[] デフォルト: 該当なし APIデプロイメントへのアクセスが許可されているオリジンのカンマ区切りリストを返すために使用されます。 CORS仕様では1つのオリジンのみが許可されるため、複数のオリジンの場合は、クライアントのオリジンを許可された値のリストに対して動的にチェックする必要があります。値"*"および"null"を使用できます。 |
allowed Methods
|
Access-Control-Allow-Methods | はい | いいえ |
必須: いいえ データ型: string[] デフォルト: 空のリスト 実際のリクエストでAPIデプロイメントに対して許可されるHTTPメソッドのカンマ区切りリストを返すために使用します。 Access-Control-Allow-Methodsのデフォルトは、プリフライト・リクエストであっても、すべての単純なメソッドを使用できます。 |
allowed Headers
|
Access-Control-Allow-Headers | はい | いいえ |
必須: いいえ データ型: string[] デフォルト: 空のリスト 実際のリクエストでAPIデプロイメントに対して許可されるHTTPヘッダーのカンマ区切りリストを返すために使用します。 |
exposed Headers
|
Access-Control-Expose-Headers | いいえ | はい |
必須: いいえ データ型: string[] デフォルト: 空のリスト APIデプロイメントの実際のリクエストに対するレスポンスでクライアントがアクセスできる、HTTPヘッダーのカンマ区切りリストを返すために使用します。HTTPヘッダーのこのリストは、CORSセーフリスト・レスポンス・ヘッダーに追加します。 |
isAllow Credentials Enabled
|
Access-Control-Allow-Credentials | はい | はい |
必須: いいえ データ型: ブール デフォルト: 資格証明(cookie、認可ヘッダーまたはTLSクライアント証明書)を使用してAPIデプロイメントへの実際のリクエストを行うことができるかどうかを示す 資格証明を使用したリクエストの実行を許可するには、 |
maxAge InSeconds
|
Access-Control-Max-Age | はい | いいえ | 必須: いいえ データ型: 整数 デフォルト: 0 に設定されている場合は無視されます。 |