InvalidQueryStringException на защищенном AWS_IAM API-шлюзе Лямбда-прокси - PullRequest
0 голосов
/ 19 ноября 2018

Я передаю параметры GET в конечную точку ресурса шлюза API AWS (LAMBDA_PROXY) с использованием без сервера.

Параметры GET представлены в аннотации массива, например.?filter[someKey]=someValue, и параметры правильно передаются обработчику в объекте события.

Как только я пытаюсь применить авторизатор к той же конечной точке (authorizer: AWS_IAM) и использую Postman для отправки правильной АвторизацииИнформация (AccesKey, SecretKey, SessionToken) с теми же параметрами запроса GET, я получаю следующий ответ: StatusCode: 400 Bad Request Заголовки: x-amzn-ErrorType InvalidQueryStringException Тело: {"message":null}

Я не смог найти ни одногохорошая информация об исключении InvalidQueryStringException от AWS.

Почему параметры запроса GET правильно передаются обработчику без авторизатора AWS_IAM, но отклоняются при наличии AWS_IAM?

Спасибо за понимание этого.

1 Ответ

0 голосов
/ 19 ноября 2018

Кажется, что "кодировка процента" в квадратных скобках - это способ обойти ограничение AWS API Gateway, заключающееся в том, что он не поддерживает квадратные скобки как часть строки запроса, что на самом деле немного странно.

Так что просто "кодирование процентов" в квадратной скобке строки запроса: ?filter[someKey]=someValue до ?filter%5BsomeKey%5D=someValue действительно помогло.

Кроме того, кодирование всей части строки запроса не удалось (500, Внутренний серверОшибка), поэтому вы, скорее всего, в итоге закодируете только квадратные скобки.

Stackoverflow: шлюз AWS API возвращает ошибку 400, когда квадратная скобка («[», «]») находится в пути Ask

...