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の詳細は、W3CMozillaからオンラインで入手可能なリソースを参照してください。

APIゲートウェイ・サービスを使用して、APIゲートウェイにデプロイするAPIでCORSサポートを有効にできます。APIデプロイメントでCORSサポートを有効にすると、APIデプロイメントのHTTPプリフライト・リクエストおよび実際のリクエストにより、1つ以上のCORSレスポンス・ヘッダーがAPIクライアントに返されます。CORSレスポンス・ヘッダーの値は、APIデプロイメント仕様で設定します。

リクエスト・ポリシーを使用して、CORSサポートをAPIに追加します(APIデプロイメント仕様へのリクエスト・ポリシーとレスポンス・ポリシーの追加を参照)。CORSリクエスト・ポリシーは、APIデプロイメント仕様のすべてのルート、または特定のルートのみにグローバルに適用できます。

次を実行して、CORSリクエスト・ポリシーをAPIデプロイメント仕様に追加できます:

  • コンソールの使用
  • JSONファイルの編集

コンソールを使用したCORSリクエスト・ポリシーの追加

コンソールを使用してCORSリクエスト・ポリシーをAPIデプロイメント仕様に追加するには:

  1. コンソールを使用してAPIデプロイメントを作成または更新し、「最初から」オプションを選択して、「基本情報」ページで詳細を入力します。

    詳細は、APIデプロイメントの作成によるAPIゲートウェイへのAPIのデプロイおよびAPIゲートウェイまたはAPIデプロイメントの更新を参照してください。

  2. 「基本情報」ページの「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レスポンスへのマップ方法を参照してください。

  3. 「変更の適用」をクリックします

  4. 「次へ」をクリックして、「認証」ページで認証オプションを指定します。

    認証オプションの詳細は、APIデプロイメントへの認証と認可の追加を参照してください。

  5. 「次」をクリックして、「ルート」ページの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レスポンスへのマップ方法を参照してください。

  6. 「変更の適用」をクリックし、「次」をクリックして、APIデプロイメントおよび個々のルートについて入力した詳細を確認します。
  7. APIデプロイメントを作成または更新するには、「作成」または「変更の保存」をクリックします。
  8. (オプション) コールしてAPIが正常にデプロイされていることを確認します(APIゲートウェイにデプロイされたAPIのコールを参照)。

JSONファイルの編集によるCORSリクエスト・ポリシーの追加

CORSリクエスト・ポリシーをJSONファイル内のAPIデプロイメント仕様に追加するには:

  1. 任意の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"
          }
        }
      ]
    }
  2. APIデプロイメント内のすべてのルートにグローバルに適用するCORSリクエスト・ポリシーを指定するには:

    1. routesセクションの前にrequestPoliciesセクションを挿入します(まだ存在しない場合)。例:

      {
        "requestPolicies": {},
        "routes": [
          {
            "path": "/hello",
            "methods": ["GET"],
            "backend": {
              "type": "ORACLE_FUNCTIONS_BACKEND",
              "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
            }
          }
        ]
      }
    2. 次の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レスポンスへのマップ方法を参照してください。

  3. 個々のルートに適用するCORSリクエスト・ポリシーを指定するには:

    1. ポリシーを適用するルートのバックエンド・セクションの後にrequestPoliciesセクションを挿入します。例:

      {
        "routes": [
          {
            "path": "/hello",
            "methods": ["GET"],
            "backend": {
              "type": "ORACLE_FUNCTIONS_BACKEND",
              "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
            },
            "requestPolicies": {}
          }
        ]
      }
    2. 次の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レスポンスへのマップ方法を参照してください。

  4. APIデプロイメント仕様を含むJSONファイルを保存します。
  5. APIデプロイメント仕様は、次の方法でAPIデプロイメントを作成または更新するときに使用します:

    • 「既存のAPIのアップロード」オプションを選択して、コンソールでJSONファイルを指定します
    • APIゲートウェイREST APIへのリクエストでJSONファイルを指定します

    詳細は、APIデプロイメントの作成によるAPIゲートウェイへのAPIのデプロイおよびAPIゲートウェイまたはAPIデプロイメントの更新を参照してください。

  6. (オプション) コールして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 はい はい

必須: いいえ

データ型: ブール

デフォルト: false

資格証明(cookie、認可ヘッダーまたはTLSクライアント証明書)を使用してAPIデプロイメントへの実際のリクエストを行うことができるかどうかを示すtrueまたはfalseを返すために使用します。

資格証明を使用したリクエストの実行を許可するには、isAllowCredentialsEnabledtrueに設定します。

maxAge InSeconds Access-Control-Max-Age はい いいえ 必須: いいえ

データ型: 整数

デフォルト: 0

プリフライト・リクエストの結果をブラウザでキャッシュできる長さ(デルタ秒)を示すために使用します。0に設定されている場合は無視されます。