Получить атрибуты пользователя из Cognito User Pool через lambda - PullRequest
0 голосов
/ 07 июня 2018

Я создал лямбду, которая извлекает пользовательские атрибуты как (имя пользователя, адрес электронной почты, имя и т. Д.), Однако, мне интересно, как можно получить пользовательские атрибуты без явного жесткого подмножества для получения всех других связанных атрибутов?мне нужно декодировать токен JWT Cognito во внешнем интерфейсе и использовать его в лямбде, чтобы определить правильного пользователя и получить связанные атрибуты?

вот моя лямбда в Node.JS:

const AWS = require('aws-sdk');
exports.handler = function(event, context) {

var cog = new AWS.CognitoIdentityServiceProvider();

var filter = "sub = \"" + "UserSUB" + "\"";
var req = {
    "Filter": filter,
    "UserPoolId": 'POOL here',
};

cog.listUsers(req, function(err, data) {
    if (err) {
        console.log(err);
    }
    else {
        if (data.Users.length === 1){ 
            var user = data.Users[0];
            var attributes = data.Users[0].Attributes;
            console.log(JSON.stringify(attributes));
        } else {
            console.log("error.");
        }
    }
});

}

1 Ответ

0 голосов
/ 09 июня 2018

Я думаю, что правильный способ сделать это зависит от того, хотите ли вы использовать API-шлюз или нет (ИМХО это будет упрощать).

Если вы не хотитеиспользуйте APIG, и вы вызываете лямбду напрямую, используя временные учетные данные, затем вы должны передать весь токен ID и заставить лямбду выполнять всю проверку и декодирование (возможно, с использованием сторонней библиотеки для JWT).Делать это во внешнем интерфейсе небезопасно, так как это означает, что у вас есть лямбда, которая слепо принимает атрибуты как факты из внешнего интерфейса, и злоумышленник может изменить их, если захочет.

Если вы используете APIШлюз для размещения лямбд за API, тогда я бы создал авторизатор cognito на основе пула пользователей, создал ресурс / метод и настроил его для использования авторизатора, и включил Use Lambda Proxy Integration для Integration Request.Все утверждения токена, включенные для клиента, будут проходить через event.requestContext.authorizer.claims, пока он действителен.

Здесь есть несколько документов AWS , хотя это не использует интеграцию прокси.Если вы используете интеграцию прокси, то можете пропустить 6b, так как APIG установит значения для вас.Это описано в ответе здесь .

...