Безсерверная функция с предоставленным авторизатором возвращает 401 - PullRequest
0 голосов
/ 10 июля 2019

Я использую без сервера.

Когда я настраиваю на клиенте одну из моих функций, как указано ниже, включая авторизатор, я получаю 401.

Однако, когда я удаляю его, проблем нет.

provider:
  name: aws
  runtime: nodejs8.10
  region: eu-west-1
  environment:
    USER_POOL_ARN: "arn:aws:cognito-idp:eu-west-1:974280.....:userpool/eu-west-1........"

functions:
  create:
    handler: handlers/create.main
    events:
      - http:
          path: create
          method: post
          cors: true
          authorizer:
            type: COGNITO_USER_POOLS
            name: serviceBAuthFunc
            arn: ${self:provider.environment.USER_POOL_ARN}

На клиенте я ожидаю, что зарегистрированный пользователь из того же пула пользователей может получить ожидаемый ответ. Однако он возвращает 401.

Любая помощь приветствуется. Благодаря.

1 Ответ

0 голосов
/ 11 июля 2019

После отчаянных часов я нашел решение.

Для тех, кто сталкивается с той же проблемой, вот решение, которое работает для меня.


  1. Добавить integration: lambda после cors: true (хотя порядок не имеет значения).

Ниже просто показано, что,

functions:
  create:
    handler: handlers/create.main
    events:
      - http:
          path: create
          method: post
          cors: true
          integration: lambda   // this solves the problem
          authorizer:
            type: COGNITO_USER_POOLS
            name: serviceBAuthFunc
            arn: ${self:provider.environment.USER_POOL_ARN}

Отправка Authorization заголовка со значением Auth.currentSession (). IdToken.jwtToken при выполнении запроса.

Ниже приведен пример отправки заголовков с использованием API из @aws-amplify/api и Auth из @aws-amplify/auth.

const currentSession = await Auth.currentSession() 
await API.post(
  'your-endpoint-name', 
  "/your-endpoint-path/..",
  {
    headers: {
      'Authorization': currentSession.idToken.jwtToken
    }
  }
)
...