han*_*bzu 42 amazon-web-services cors aws-lambda aws-api-gateway
为了防止未登录的用户通过AWS API网关调用我的lambda函数,我使用的是Custom Authorizer lambda解决方案.
如果请求被授权(200)并且我从被叫lambda得到响应,一切正常,我得到了Access-Control-Allow-Origin标题.
但是,如果该请求没有被授权,我得到一个401一个没有Access-Control-Allow-Origin头,所以阻止我读响应的401个状态和将用户重定向到登录页面.
我相信这是因为自定义自动化机制不知道请求需要使用CORS.有谁知道这实际上是问题吗?你知道任何可能的解决方案吗?
Bob*_*ney 18
我很高兴地宣布新的网关响应功能,该功能允许您自定义不会调用您的集成的请求的错误响应.这允许您确保包含CORS头,即使在失败的身份验证请求中也是如此.
阅读我们的文档,其中包括一个CORS示例.
Lor*_*ara 15
是的,这是API Gateway自定义授权程序的已知错误.谢谢让我们注意到这个.我们部署修复程序后,团队将更新此帖子.不便之处敬请原谅.
这对我有用(在 AWS::APIGateway 中内联:定义)
Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Dev
      GatewayResponses:
        UNAUTHORIZED:
          StatusCode: 401
          ResponseParameters:
            Headers:
              Access-Control-Allow-Origin: "'*'"
        ACCESS_DENIED:
          StatusCode: 403
          ResponseParameters:
            Headers:
              Access-Control-Allow-Origin: "'*'"
        DEFAULT_5XX:
          StatusCode: 500
          ResponseParameters:
            Headers:
              Access-Control-Allow-Origin: "'*'"
        RESOURCE_NOT_FOUND:
          StatusCode: 404
          ResponseParameters:
            Headers:
              Access-Control-Allow-Origin: "'*'"  
可用的网关响应命名是:
DEFAULT_INTERNAL
DEFAULT_4XX
DEFAULT_5XX
RESOURCE_NOT_FOUND
UNAUTHORIZED
ACCESS_DENIED
AUTHORIZER_FAILURE
AUTHORIZER_CONFIGURATION_ERROR
MISSING_AUTHENTICATION_TOKEN
INVALID_SIGNATURE
EXPIRED_TOKEN
INTEGRATION_FAILURE
INTEGRATION_TIMEOUT
API_CONFIGURATION_ERROR
UNSUPPORTED_MEDIA_TYPE
REQUEST_TOO_LARGE
BAD_REQUEST_PARAMETERS
BAD_REQUEST_BODY
THROTTLED
QUOTA_EXCEEDED
INVALID_API_KEY
WAF_FILTERED
因此,您可以为这些受控 AWS 响应指定响应自定义。
因为我花了一段时间才弄清楚如何在 Cloud Formation 中将它们组合在一起,所以这里有一个片段展示了如何设置它。
...
    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"
| 归档时间: | 
 | 
| 查看次数: | 7935 次 | 
| 最近记录: |