2016-04-28 15 views
28

Để ngăn người dùng chưa đăng nhập gọi hàm lambda của tôi qua Cổng API AWS, tôi đang sử dụng Tùy chỉnh Giải pháp lambda ủy quyền.401 trả về từ Trình xác nhận tùy chỉnh cổng API bị thiếu tiêu đề 'Access-Control-Allow-Origin'

Nếu yêu cầu được cho phép (200) và tôi nhận được phản hồi từ lambda gọi là mọi thứ hoạt động tốt và tôi nhận được tiêu đề 'Access-Control-Allow-Origin'. Tuy nhiên, nếu yêu cầu không được ủy quyền, tôi nhận được 401 không có tiêu đề 'Access-Control-Allow-Origin', do đó ngăn tôi đọc trạng thái 401 của phản hồi và chuyển hướng người dùng đến đăng nhập trang.

Tôi tin rằng điều này là do cơ chế Tự động chỉnh sửa tùy chỉnh không biết rằng yêu cầu cần sử dụng CORS. Có ai biết rằng đây thực sự là vấn đề? Bạn có biết bất kỳ giải pháp nào có thể không?

Trả lời

9

Vâng, đây là lỗi đã biết với trình ủy quyền tùy chỉnh API Gateway. Cám ơn bạn đã cho chúng tôi biết về vấn đề này. Nhóm sẽ cập nhật bài đăng này khi chúng tôi triển khai bản sửa lỗi. Xin lỗi vì sự bất tiện.

+5

Mọi cập nhật? Có vẻ như tiêu đề vẫn chưa được gửi. – zanona

+2

Nhấn cùng một vấn đề ở đây. Bản cập nhật sẽ tuyệt vời –

+3

Vâng, đây vẫn là một vấn đề, điều này khá là vô lý khi xem xét nó đã diễn ra trong bao lâu. Những thứ như thế này khiến API Gateway không sẵn sàng cho sản xuất, và phần tồi tệ nhất là, bạn không tìm ra cho đến khi bạn đầu tư nhiều vào dịch vụ. – paulwithap

5

Tôi vui mừng thông báo tính năng Gateway Responses mới cho phép bạn tùy chỉnh phản hồi lỗi cho các yêu cầu không gọi tích hợp của bạn. Điều này cho phép bạn đảm bảo rằng các tiêu đề CORS được bao gồm, ngay cả trên các yêu cầu auth không thành công.

Đọc thêm trong số documentation của chúng tôi, bao gồm ví dụ CORS.

+0

Dưới đây là những gì bạn cần: http://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-gateway-responses-in-swagger.html?shortFooter=true – Sergei

+0

Trường hợp nào json đó cần phải đi ? –

+0

Trong trường hợp bạn đang làm việc với serverless.yaml, đây là những gì bạn cần biết https://github.com/serverless/examples/blob/master/aws-node-auth0-custom-authorizers-api/serverless.yml # L33 –

0

Vì tôi mất một lúc để tìm hiểu cách kết hợp tất cả lại với nhau trong Cloud Formation, đây là một đoạn trích dẫn cách thiết lập nó.

... 
    MyApi: 
     Type: "AWS::ApiGateway::MyApi" 
     Properties: 
     Description: My API 
     Name: "my-api" 
    MyApiAuthorizer: 
     Type: "AWS::ApiGateway::Authorizer" 
     Properties: 
     Name: "my-api-authorizer" 
     IdentitySource: "method.request.header.Authorization" 
     ProviderARNs: 
      - !GetAtt MyUserPool.Arn 
     RestApiId: !Ref MyAApi 
     Type: COGNITO_USER_POOLS 
    MyApiGatewayResponse: 
     Type: "AWS::ApiGateway::GatewayResponse" 
     Properties: 
     ResponseParameters: 
      "gatewayresponse.header.Access-Control-Allow-Origin": "'*'" 
      "gatewayresponse.header.Access-Control-Allow-Headers": "'*'" 
     ResponseType: UNAUTHORIZED 
     RestApiId: !Ref MyApi 
     StatusCode: "401" 
0

Cách dễ nhất để giải quyết lỗi này cho tất cả các lỗi 4XX Xuất xứ "có giá trị '*'.

Xem ảnh chụp màn hình:

Các vấn đề liên quan