AWS Api Gateway: пост-запрос NodeJ - «Авторизация не настроена» для пользователя, вошедшего в систему cognito - PullRequest
0 голосов
/ 05 июля 2018

Я пытался получить доступ к своей лямбде, используя POST, с Nodejs при входе в систему.

Я получаю ошибку:

Авторизация не настроена

Я использую токен ID, полученный при успешном входе в систему. У меня есть учетная запись cognito в качестве ресурса авторизации в конфигурации моего шлюза. Мой источник токенов "Авторизация".

Мой код:

cognitoUser.authenticateUser(authenticationDetails, {
    onSuccess: function (result) {
        var accessToken = result.getAccessToken().getJwtToken();
        var authToken = result.getIdToken().getJwtToken();
        console.log("Logged in");
        requestSignature(authToken);
    },  

    onFailure: function(err) {
        console.log(err)
        authToken = ''
    },  

});

function requestSignature(authToken) {

    var request = require('request');

    headers = { 
            Authorization: authToken,
    }   
    data = { 
        key : "key",
        bucket : "test"
    }   

    var options = { 
        method: 'POST',
        uri: invoke_url+'/getsignature',
        contentType: 'application/json',
        headers: headers
        data: data
    };

    request.post(options,(err, response, body) => {
        if (response.statusCode < 300) {
            return callback(null, {
                statusCode: '200',
                body: res,
                headers: { 'Content-Type': 'application/json' },
            });
        } else {
            console.log(response)
        }
    });
}

1 Ответ

0 голосов
/ 06 июля 2018

Проблема была конкретно в утилите API Gateway Test.

В моей лямбда-функции

if (!event.requestContext.authorizer) {
      errorResponse('Authorization not configured', context.awsRequestId, callback);
      return;
    }

Сработало, потому что заголовок Authorization не может быть передан в утилиту Method Test, а также по какой-то причине получил идентификатор Cognito.

Когда я удалил эту строку, я получил ответ УСПЕХА. Когда я возвращаю событие, которое было передано в лямбду, я не получил «authorizer» в requestContext.

Это привело меня к мысли, что Авторизация не функционировала правильно. Я полностью удалил заголовок авторизации и токен и получил такой же успешный лямбда-ответ с тем же requestContext.

Когда я вернулся в свое приложение, я получил эту ошибку, когда у меня нет идентификатора авторизации:

'{"message":"Unauthorized"}'

Когда я добавляю Авторизацию, я получаю успешный лямбда-запрос с этим в контексте запроса:

"authorizer":
  {"claims":
    {"sub":"ba<>",
     "aud":"4v<>",
     "email_verified":"true",
     "event_id":"<>",
     "token_use":"id",
     "auth_time":"1530899925",
     "iss":"https://cognito-idp.<region>.amazonaws.com/<cognito-id>",
     "cognito:username":"tester",
     "exp":"<>",
     "iat":"<>", 
     "email":"<>@<>"}},
     "resourcePath":"/<>",
     "httpMethod":"POST",
     "extendedRequestId":"<>",
     "requestTime":"<>",
     "path":"<>",
     "accountId":"<>",

В моем приложении требуется авторизация, и возвращается соответствующий контекст.

В этом случае проблемы авторизации Cognito относятся исключительно к тесту шлюза API.

...