Аутентификация шлюза API AWS без использования Cognito - PullRequest
0 голосов
/ 15 мая 2019

В настоящее время я работаю в системе, в которой у нас есть система аутентификации / авторизации.

Мы переходим на AWS, веб-API и лямбду ... Я хочу использовать то, что у нас есть для аутентификации / авторизации.

Я имею в виду лямбду аутентификации / авторизации, в которой есть конечная точка для входа в систему и одна для получения ролей для конкретного пользователя.

Веб-API направляет эти 2 маршрута к лямбде аутентификации / авторизации, а остальные к другим лямбдам.

Мне также нужно использовать JWT для последующих вызовов к шлюзу. Где должно произойти создание / использование токена в моем сценарии выше?

Есть ли лучший способ использовать нашу пользовательскую схему ролей / пользователей в этой новой вселенной шлюза / лямбды AWS?

1 Ответ

1 голос
/ 15 мая 2019

Как упомянуто в комментарии Реза Насири , Custom / Lambda Authorizer, кажется, ваш лучший вариант. Вы можете написать собственную логику проверки в своей функции Lambda Authorizer, а Lambda Authorizer может проверить токен JWT в соответствии с вашими требованиями. У вас есть полная свобода кода при использовании Lambda Authorizer, и вы можете реализовать любую логику и, следовательно, использовать токены / строки из вашего старого механизма аутентификации.

Пример фрагмента кода для Lambda Authorizer на основе токена (строки) согласно официальной документации представлен следующим образом:

// A simple token-based authorizer example to demonstrate how to use an authorization token 
// to allow or deny a request. In this example, the caller named 'user' is allowed to invoke 
// a request if the client-supplied token value is 'allow'. The caller is not allowed to invoke 
// the request if the token value is 'deny'. If the token value is 'unauthorized' or an empty
// string, the authorizer function returns an HTTP 401 status code. For any other token value, 
// the authorizer returns an HTTP 500 status code. 
// Note that token values are case-sensitive.

exports.handler =  function(event, context, callback) {
    var token = event.authorizationToken;
    switch (token) {
        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"); // Return a 500 Invalid token response
    }
};

// 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;
}

Lambda Authorizer генерирует политику IAM, основываясь на результатах проверки. Следовательно, вы можете создавать собственные политики в соответствии с вашим вариантом использования.

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