Как аутентифицировать сторонний запрос webhook в AWS Lambda развертывании без сервера - PullRequest
0 голосов
/ 07 марта 2020

Я пишу функцию, которая обрабатывает обратный вызов сеанса оформления Stripe.com.

Обычно я получаю некоторые данные в теле запроса, проверяю их с помощью библиотеки узлов Stripe, а затем пытаюсь написать в Dynamodb для обработки некоторых бизнес-логиок бэкэнда c после завершения покупки. ,

Проблема в том, что мне нужно оставить конечную точку API открытой, чтобы Stripe могла вызывать ее, а также дать функции разрешение на запись в Dynamodb. При установке авторизатора : aws_iam требуется запрос на включение токена аутентификации, а при тестировании веб-крюка с Stripe возвращается ошибка «Missing Authentication Token».

Когда я удаляю авторизатор : aws_iam Stripe может нормально вызывать webhook, потому что конечная точка открыта, но тогда нет настроек разрешений, позволяющих писать в динамодаб. Похоже на уловку22.

Вот мой безсерверный сервер:

handleCourseCheckout:
   handler: checkout_completed.main
   events:
      - http:
         path: webhook/purchased
         method: post
         cors: true
         authorizer: aws_iam

и вот где определен авторизатор aws_iam:

provider:
  name: aws
  runtime: nodejs10.x
  stage: dev

  ......

  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:DescribeTable
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
      # Restrict our IAM role permissions to
      # the specific table for the stage
      Resource:
        - "Fn::ImportValue": TableArn

1 Ответ

1 голос
/ 07 марта 2020

Это довольно странно. В вашем случае вам необходимо настроить:

  • Широко открытое API GW (authorizer: aws_iam означает ограничение доступа только к конечной точке API gw)
  • API GW должны иметь разрешения для вызова лямбда-функции
  • лямбда-функция должна иметь доступ только к DynamoDB
  • удалить CORS

Пожалуйста, проверьте права доступа лямбда (роль выполнения) - проверьте api gw (роль запроса интеграции)

...