Как получить доступ к пользовательскому заголовку из AWS Lambda Authorizer? - PullRequest
0 голосов
/ 19 сентября 2019

Я создал Authorizer в AWS API Gateway.Этот Авторизатор относится к Лямбда-функции.

Я передаю следующие значения в заголовке в конечную точку API с помощью Postman.

 {   
 "type":"TOKEN",  
 "authorizationToken": "testing2",   
  "methodArn": "arn:aws:execute-api:us-west-2:444456789012:ymy8tbxw7b/*/GET/" 
 }

Указанные выше значения заголовка получены в лямбда-функции.Я могу видеть это через журналы в CloudWatch.

Я хочу передать дополнительное значение 'clientID' в заголовке.Поэтому я передаю следующие значения в заголовке почтальона:

{
  "type":"TOKEN",
  "authorizationToken": "testing2",
  "methodArn": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/*/GET/",
  "clientID" : "1000"
}

В этом случае функция Lambda не получает clientID.Я проверил различные потоки в SO, и понял, что это может быть достигнуто отображением заголовка.Поэтому я сделал следующее.

В разделе «Выполнение метода» метода API я создал новый заголовок clientID.В разделе «Запрос на интеграцию» в разделе «Заголовки HTTP» я указал следующее значение

Имя: clientID Отображено из: method.request.header.clientID

После выполнения вышеизложенного яразвернул API и попытался вызвать метод из Postman, но clientID показывается неопределенным.Ниже приведен код, который я написал в лямбда-функции

exports.handler = function(event, context, callback) {


  var clientid = event.clientID;

//I always get event.clientID undefined 
 console.log("The client ID is:" + event.clientID);

}

EDIT

Ниже приведена ошибка из журнала CloudWatch.

START RequestId: 274c6574-dea5-4009-b777-a929f84b9a9d Version: $LATEST
2019-09-19T09:40:25.944Z 274c6574-dea5-4009-b777-a929f84b9a9d INFO The client ID is:undefined
2019-09-19T09:40:25.968Z 274c6574-dea5-4009-b777-a929f84b9a9d ERROR Invoke Error
{
    "errorType": "Error",
    "errorMessage": "Unauthorized",
    "stack": [
        "Error: Unauthorized",
        "    at _homogeneousError (/var/runtime/CallbackContext.js:13:12)",
        "    at postError (/var/runtime/CallbackContext.js:30:51)",
        "    at callback (/var/runtime/CallbackContext.js:42:7)",
        "    at /var/runtime/CallbackContext.js:105:16",
        "    at Runtime.exports.handler (/var/task/index.js:40:4)",
        "    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)",
        "    at process._tickCallback (internal/process/next_tick.js:68:7)"
    ]
}

1 Ответ

0 голосов
/ 19 сентября 2019

Я понял, почему я не получил значение в заголовке.Я сделал следующее

1) Вместо типа TOKEN я использовал тип REQUEST в заголовке.Я понял это, прочитав следующую ссылку.Эта ссылка также содержит код для типа запроса.

https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html

2) Я удалил все сопоставления из запроса метода и запроса интеграции.

3) Развернул API.

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