2

我有一个Custom Authorizer. API Gateway当通过它部署时,SAM Module它也会Options Method在您启用时创建CORS。我真的不明白为什么自定义授权者会附加到Options端点?在此处输入图像描述

当我尝试从浏览器调用端点时,这是抛出的,当我从方法403中删除时,它工作得很好。AuthorizationOptions

在此处输入图像描述

下面是template.yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'

Globals:
  Function:
    Runtime: nodejs8.10
  Api:
    Cors:
      AllowMethods: "'*'"
      AllowHeaders: "'*'"
      AllowOrigin: "'*'"

Resources:
  TestApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      Auth:
        DefaultAuthorizer: testAuthoriser
        Authorizers:
          testAuthoriser:
            FunctionArn:
              Fn::ImportValue: !Sub test-custom-autoriser
            Identity:
              Header: Authorization
              ValidationExpression: ^Bearer [-0-9a-zA-Z\._]*$
              ReauthorizeEvery: 30 

  Version:
    Type: 'AWS::Serverless::Function'
    Properties:
      FunctionName: test
      CodeUri: src/test
      Handler: index.test
      Events:
        EndPoint:
          Type: Api
          Properties:
            RestApiId: !Ref TestApi
            Path: /test
            Method: get
            Auth:
              Authorizer: testAuthoriser

我也启用了'Access-Control-Allow-Origin': '*'in 标头。不知道这里发生了什么。任何帮助,将不胜感激

4

2 回答 2

0

这是答案,请参阅此处的 aws sam 问题

 Api:
    Cors:
      AllowHeaders: "'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization'" 
      AllowOrigin: "'*'"
    Auth:
      DefaultAuthorizer: CognitoAuthorizer
      Authorizers:
        CognitoAuthorizer:
          UserPoolArn: yourUserPool
      AddDefaultAuthorizerToCorsPreflight: False // <== this line
于 2020-05-20T20:36:38.970 回答
0

对于 CORS,AWS API Gateway 将始终启用 OPTIONS 方法以允许预检测试。您可以在docs中阅读更多相关信息。

您在浏览器中看到预检错误的原因是 403 Forbidden 来自您的自定义授权方。自定义授权器不返回标头,因此如果自定义授权器拒绝请求,您将始终看到预检错误。

要对此进行调试,请记录您的自定义授权方返回的策略。然后,您可以在 CloudWatch 中看到它。策略必须包含所请求资源的 Allow 语句。

于 2019-01-18T22:07:17.307 回答