Lambda Authorizer не возвращает правильное сообщение об ошибке с callback () в node.js - PullRequest
1 голос
/ 08 марта 2019

Я создал Lambda Authorizer на AWS API Gateway, который вызывает функцию Lambda. Ниже приведен код в лямбда-функции, написанный на коде Node.js 8.0.

exports.handler =  function(event, context, callback) {
    var token = event.authorizationToken;
    switch (token.toLowerCase()) {
        case 'allow':
            callback(null, generatePolicy('user', 'Allow', event.methodArn));
            break;
        case 'deny':
            callback(null, generatePolicy('user', 'Deny', event.methodArn));
            break;
        case 'unauthorized':
            callback("Unauthorized");   // Return a 401 Unauthorized response
            break;
        default:
            callback("Error: Invalid token"); 
    }
};

// Help function to generate an IAM policy
var generatePolicy = function(principalId, effect, resource) {
    var authResponse = {};

    authResponse.principalId = principalId;
    if (effect && resource) {
        var policyDocument = {};
        policyDocument.Version = '2012-10-17'; 
        policyDocument.Statement = [];
        var statementOne = {};
        statementOne.Action = 'execute-api:Invoke'; 
        statementOne.Effect = effect;
        statementOne.Resource = resource;
        policyDocument.Statement[0] = statementOne;
        authResponse.policyDocument = policyDocument;
    }

    // Optional output with custom properties of the String, Number or Boolean type.
    authResponse.context = {
        "stringKey": "stringval",
        "numberKey": 123,
        "booleanKey": true
    };
    return authResponse;
}

(приведенный выше пример кода с веб-сайта https://markpollmann.com/lambda-authorizer/)

Если я сохраню и протестирую эту функцию, передав недействительное значение для authorizationToken, я получу ожидаемый результат, который ниже.

Response:
{
  "errorMessage": "Error: Invalid token"
}

Request ID:
"e93567c0-fcbb-4cb1-b0b3-28e9c1b30162"

Но если я вызову этот API из Почтальона, передав значение в заголовке, я получу следующий ответ. Я получаю эту ошибку для любого значения в заголовке, т.е. отрицать, разрешить, неавторизованный, неправильный и т. Д.

{
    "message": null
}

Сообщение о статусе в почтальоне показывает «500 Internal Server Error». Ниже приведена подробная информация из заголовка раздела почтальона.

content-length →16
content-type →application/json
date →Fri, 08 Mar 2019 14:07:57 GMT
status →500
x-amz-apigw-id →W89kFDRDoEFxYg=
x-amzn-errortype →AuthorizerConfigurationException
x-amzn-requestid →92f31d11-41ab-11e9-9c36-97d38d96f31b

Я не понимаю, почему API возвращает вышеуказанный ответ и сообщение об ошибке, в то время как лямбда-тест работает нормально.

Я уже прошел следующие две темы в SO, но ответы / комментарии не могли помочь в моем случае.

AWS API Gateway с пользовательским авторизатором возвращает AuthorizerConfigurationException AWS API Gateway Custom Authorizer AuthorizerConfigurationException

1 Ответ

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

Я понял причину, по которой я получил сообщение = null для неверного ввода. В блоке по умолчанию в переключателе использовался параметр «Ошибка: неверный токен» в методе обратного вызова (). API Gateway определяет только «Разрешить», «Запретить» и «Несанкционированный» в качестве допустимых значений. Эти значения также чувствительны к регистру. Если какие-либо строковые значения, отличные от этих значений, передаются в метод callback (), то API-шлюз вернет клиенту message = null.

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