Как вызвать лямбду за авторизатором API Gateway - PullRequest
0 голосов
/ 19 марта 2019

У меня есть следующий стек CloudFormation.2 лямбда-выражения (приветствие и аутентификация) с API-шлюзом, настроенным для использования лямбда-адреса авторизации для авторизации.

AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Resources:
  GreetingsApiGateway:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Prod
      Auth:
        DefaultAuthorizer: MyAuthorizer
        Authorizers:
          MyAuthorizer:
            FunctionArn: !GetAtt AuthLambda.Arn

  GreetingsLambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: "s3://<bucket-name>/code.zip"
      Handler: src/index.greeting
      Events:
        GetRoot:
          Type: Api
          Properties:
            RestApiId: !Ref GreetingsApiGateway
            Path: /hello
            Method: get

  AuthLambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: "s3://<bucket-name>/code.zip"
      Handler: src/index.auth

Globals:
  Function:
    Runtime: nodejs8.10
  # check whether I can use resources within globals

Outputs:
  ApiURL:
    Description: "OUR API URL"
    Value: !Sub "https://${GreetingsApiGateway}.execute-api.${AWS::Region}.amazonaws.com/Prod/"

Код для лямбда-кодов следующий:

exports.greeting = async () => ({ statusCode: 200, body: "Hello Beautiful World!" });

exports.auth = async () => ({ statusCode: 200, body: "I wanna do the authorisation!" });

Я ожидал авторизациювсе время терпеть неудачу, но также видеть журналы из Auth lambda в моих журналах CloudWatch.

Что происходит:

Вызывается изнутриAPI Gateway

Если я попал в тест без каких-либо заголовков из консоли API Gateway, я получу результат "Hello Beautiful World".В моих шаблонах CloudWatch нет лямбда-аутентификационных журналов.

Вызван из POSTMAN

Я попытался отправить этот ввод в заголовках запроса GET.Ответ был «не авторизован» без каких-либо журналов в журналах Auth lambda CloudWatch.

{
    "type":"TOKEN",
    "authorizationToken":"<caller-supplied-token>",
    "methodArn":"arn:aws:execute-api:<regionId>:<accountId>:<apiId>/<stage>/<method>/<resourcePath>"
}

Что происходит?

1 Ответ

0 голосов
/ 19 марта 2019

Чтобы получить ответ, нам нужно использовать заголовок авторизации, все еще не понимая, почему запрос из консоли API Gateway получил ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...