0

フロントエンドとして反応するSPAを構築し、サーバーレス(AWSラムダ)フレームワークにはバックエンドがあります。

React アプリは S3 にデプロイされています。このアプリは、AWS API Gateway を介してラムダ関数 (サーバーレス) と通信します。

S3 ドメインとバックエンド (AWS API Gateway、AWS ラムダ、DynamoDB) にある反応アプリは別のドメインにあるためです。CORS の問題が発生します。

CORS の問題を修正するために、Access-Control-Allow-Originヘッダーを反応アプリのドメイン URLとしてハードコーディングしました。したがって、バックエンドは発信元が既知のソースからのものであることを理解し、origin-CORS エラーを解決します。

ただし、リクエストのCookieにアクセスするには、「Access-Control-Allow-Credentials」と呼ばれる別のヘッダーがtrueである必要があります。

IF Access-Control-Allow-Originが "*" の場合、プライバシーの懸念からAccess-Control-Allow-Credentialsをfalseにする必要があります。

そのため、Access-Control-Allow-OriginReact の domainに設定した場合、Access-Control-Allow-Credentialstrueになる可能性があります。

API ゲートウェイの応答メソッドと統合の応答メソッドにAccess-Control-Allow-Credentialsヘッダーを追加しました。問題は、応答としてクライアント側でAccess-Control-Allow-Credentialsヘッダーを取得していないことです。これ以外のすべてのヘッダーを取得しています。API Gateway コンソールをテストするとヘッダーが表示されますが、postman とブラウザーでテストすると、上記のヘッダーが表示されません。

クライアントのヘッダーは ブラウザがヘッダーを受信しました

しかし、AWS API Gateway をテストすると、これが得られますAPI ゲートウェイ コンソール

問題は、Access-Control-Allow-Credentialsヘッダーがブラウザーとポストマンで応答として取得されず、AWS API Gateway コンソールでテストすると表示されることです。何が問題なのですか?

4

1 に答える 1

0

API 用にエクスポートされた Swagger を投稿してください。「Access-Control-Allow-Credentials」ヘッダーについて特別なことは何もないことを確認できるので、必要に応じてこれをマップできるはずです。

API の例:

swagger: "2.0"
info:
  version: "2016-09-17T00:36:34Z"
  title: "foo"
host: "45c24yfor1.execute-api.us-east-1.amazonaws.com"
basePath: "/test"
schemes:
- "https"
paths:
  /:
    get:
      consumes:
      - "application/json"
      produces:
      - "application/json"
      responses:
        200:
          description: "200 response"
          schema:
            $ref: "#/definitions/Empty"
          headers:
            Cookie:
              type: "string"
            Access-Control-Allow-Credentials:
              type: "string"
            Set-Cookie:
              type: "string"
      x-amazon-apigateway-integration:
        responses:
          default:
            statusCode: "200"
            responseParameters:
              method.response.header.Access-Control-Allow-Credentials: "'test'"
        requestTemplates:
          application/json: "{\"statusCode\": 200}"
        passthroughBehavior: "when_no_match"
        type: "mock"
definitions:
  Empty:
    type: "object"
    title: "Empty Schema"

指示:

curl -v https://45c24yfor1.execute-api.us-east-1.amazonaws.com/test

    < HTTP/1.1 200 OK
    < Date: Sat, 17 Sep 2016 00:36:46 GMT
    < Content-Type: application/json
    < Content-Length: 0
    < Connection: keep-alive
    < Access-Control-Allow-Credentials: test
    < x-amzn-RequestId: d04135bc-7c6e-11e6-a593-559956e50e8a
    < X-Cache: Miss from cloudfront
    < Via: 1.1 b63769e2d89c89274acd908e4bfcb9f4.cloudfront.net (CloudFront)
    < X-Amz-Cf-Id: 3Nevesi15lEGox0jrFq8B2HEknHbbFfISlg4yv7Lw3X90S2sUIWE_g==
于 2016-09-17T00:40:15.227 に答える