Получить идентификатор пула пользователей Cognito в функции Lambda - PullRequest
0 голосов
/ 29 мая 2018

У меня есть функция Lambda, обрабатывающая POST-запросы, запускаемые шлюзом API.Последний настроен для авторизации через авторизатор пула пользователей Cognito.Авторизация работает - если я передаю токен ID пользователя, запрос обрабатывается, если я не получаю 401.

Однако я не могу получить идентификацию авторизованного пользователя в функции Lambda.Вся документация заставляет меня верить, что это должно быть в контексте, но это не так.Я тоже не могу отобразить это там.Более того, по-видимому, также нет способа запросить пул пользователей для пользователя по его токену ID.

Нужен ли для этого пул идентификации?Если так, как это работает?И почему шлюз API не может автоматически передавать идентификационные данные пользователя?

Ответы [ 2 ]

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

Используйте event.requestContext.authorizer.claims.sub для получения идентификатора Cognito пользователя sub, который в основном является его идентификатором. Предполагается, что вы используете Proxy Integration с API Gateway и Lambda.

Вот простой пример использования Node;должен быть похож на другие SDK.

exports.handler = async (event, context, callback) => {
    let cognitoIdentity = event.requestContext.authorizer.claims.sub

    // do something with `cognitoIdentity` here

    const response = {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Origin": "*"
        },        
        body: JSON.stringify("some data for user"),
    };
    return response;
};
0 голосов
/ 01 июня 2018

Зависит от того, выбран ли Use Lambda Proxy Integration в Integration Request для лямбды.Если он установлен, тогда все утверждения токена будут переданы на event.requestContext.authorizer.claims.

Если вы не используете Lambda Proxy Integration, тогда вам нужно использовать Body Mapping Template в Integration Request для лямбда-выражения,Пример шаблона с application/json Content-Type:

"context" : {
    "sub" : "$context.authorizer.claims.sub",
    "username" : "$context.authorizer.claims['cognito:username']",
    "email" : "$context.authorizer.claims.email",
    "userId" : "$context.authorizer.claims['custom:userId']"
}

Предполагается, что в пользовательском пуле есть собственный атрибут с именем userId, и он может быть прочитан клиентом.

Вы не можете использовать токен id для API aws cognito-idp, вам нужно использовать токен доступа.Однако вы можете использовать вызов AdminGetUser с именем пользователя, если ваш lambda авторизован.

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