Метод API Gateway Options, выбрасывающий 403

У меня есть Custom Authorizer с API Gateway, При развертывании через SAM Module это также создает Options Method когда вы включаете CORS, То, чего я действительно не понимаю, это то, почему пользовательский авторизатор привязывается к Options конечная точка?

Это бросать 403 когда я пытаюсь вызвать конечную точку из браузера и прекрасно работает, когда я удаляю Authorization от Options метод.

Ниже 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': '*' в заголовке. Не уверен, что здесь происходит. Любая помощь будет оценена

1 ответ

Вот ответ, см. Проблему с 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

Для CORS AWS API Gateway всегда будет включать метод OPTIONS, чтобы разрешить предварительную проверку. Вы можете прочитать больше об этом в документации.

Причина, по которой вы видите предпечатную ошибку в вашем браузере, потому что 403 Запрещено поступает от вашего Custom Authorizer. Custom Authorizer не возвращает заголовки, поэтому вы всегда увидите ошибку предпечатной проверки, если запрос был отклонен Custom Authorzer.

Чтобы исправить это, зарегистрируйте политику, которую возвращает ваш Custom Authorizer. Вы можете увидеть это в CloudWatch. Политика должна содержать инструкцию Allow для запрашиваемого ресурса.

Другие вопросы по тегам