2017-08-26 6 views
5

COR32 + SAMの設定のためのスワッガーファイルを含むhereの例に従った。SAM/CloudFormation/SwaggerでAPIゲートウェイのCORSを設定する

これは間違いなく、CORSヘッダーを手作業で各機能に追加しない限り、CORSエラーが発生したようです。または私は何か間違っているのですか?

+0

上記のコードはあなたのために機能しますが、これを達成するための最良の方法であることを確認したいだけですか? – mostafazh

答えて

3

すべてのAWSドキュメントでは、すべてのAPIゲートウェイリソースにこれらの3つのヘッダーを指定し、CORSをサポートするすべての関数応答で返す必要がある場合は、3つのヘッダーを2のAPIゲートウェイエンドポイントに追加する必要がありますサンプルプロジェクトのswagger.yamlファイル

あなたが言及したのGithubのサンプルは、など... APIに行われたすべての要求に合致し、要求のparth、メソッドでプロキシラムダ関数をトリガする基本的API Gatewatyルート、API Gatewayproxy resourceと呼ばれるものを使用していますどのように動作するかについては、hereをご覧ください。

serverlessのようなものを試してみると、SAMのようにラムダ関数を整理するのに役立ちますか?それはまたsupport CORSです。 CORSは喜んで動作するために

0

は、次の2つの拠点をカバーする必要がある(例えばswaggerdoc /クロムで)あなたが処理しているすべてのパスについては

  1. あなたが
  2. を扱う方法OPTIONS応答の指定を持っています
  3. 実際のメソッド呼び出しで 'Access-Control-Allow-Origin'ヘッダーが返される

私は現在、最も簡単な解決策を見つけました:012

:API GWで扱うOPTIONS部分はあなたがGETやPOSTで「/フレッド」のパスをサポートしている場合 2.ヘッダーは、APIだから、GW

により非嘲笑応答に追加モック持つ1

 

     "/fred" { 
      "options": { 
      "consumes": [ 
       "application/json" 
      ], 
      "produces": [ 
       "application/json" 
      ], 
      "responses": { 
       "200": { 
       "description": "Success", 
       "schema": { 
        "$ref": "#/definitions/Empty" 
       }, 
       "headers": { 
        "Access-Control-Allow-Origin": { 
        "type": "string" 
        }, 
        "Access-Control-Allow-Methods": { 
        "type": "string" 
        }, 
        "Access-Control-Allow-Headers": { 
        "type": "string" 
        } 
       } 
       } 
      }, 
      "x-amazon-apigateway-integration": { 
       "responses": { 
       "default": { 
        "statusCode": "200", 
        "responseParameters": { 
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,OPTIONS'", 
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", 
        "method.response.header.Access-Control-Allow-Origin": "'*'" 
        } 
       } 
       }, 
       "requestTemplates": { 
       "application/json": "{\"statusCode\": 200}" 
       }, 
       "passthroughBehavior": "when_no_match", 
       "type": "mock" 
      } 
     } 

は、その後、あなたの実際のプロセッサでは、あなたはあなたにもエラー応答などにこのヘッダーを返す必要が「アクセス制御 - 許可 - 起源」ヘッダ

 

    "post": { 
     "responses": { 
       "200": { 
       "description": "Success", 
       "schema": { 
        "$ref": "#/definitions/myrecord" 
       }, 
       "headers": { 
        "Access-Control-Allow-Origin": { 
        "type": "string" 
        } 
       }, 
     ..... 


     "x-amazon-apigateway-integration": { 
     "default": { 
        "statusCode": "200", 
        "responseParameters": { 
        "method.response.header.Access-Control-Allow-Origin": "'*'" 
        }, 
        "responseTemplates": { 
        "application/json": " ......" 
        } 
       } 

     ..... 

注意を持っていることを確認する必要があります

0

Allow-Originで*を使用しているときも同様の問題がありました。

1資格情報フラグがtrueの場合、Access-Control-Allow-Originでワイルドカードを使用できません。

あなたは

'Access-Control-Allow-Origin': 'http://localhost:8000', 

または任意のあなたのURLが、要求しているから、あなたの要求のURLで

'Access-Control-Allow-Origin': '*', 

を交換してください。

また、リターンヘッダーにもポート番号を含める必要があります。それはまた、httpかhttpsかを含んでいます。

自動化する場合は、参照元のプロトコル、ホスト、ポート部分をホワイトリストに入れて渡すことができるreferr URLを取得します。

希望します。

関連する問題