【问题标题】:Get user attributes from Cognito User Pool through lambda通过 lambda 从 Cognito 用户池中获取用户属性
【发布时间】:2018-06-09 07:53:58
【问题描述】:

我创建了一个 lambda,它检索用户属性为(用户名、电子邮件、姓名...等)但是,我想知道如何在不显式硬编码子值的情况下获取用户属性以获取所有其他相关属性?我是否需要在前端解码 JWT Cognito 令牌并在 lambda 中使用它来确定正确的用户并检索相关属性?

这是我在 Node.JS 中的 lambda:

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.");
        }
    }
});

}

【问题讨论】:

    标签: aws-lambda amazon-cognito


    【解决方案1】:

    我认为执行此操作的正确方法取决于您是否要使用 API Gateway(恕我直言,这会让事情变得更简单)。

    如果您想使用 APIG,并且您使用临时凭证直接调用 lambda,那么您应该传递整个 ID 令牌并让 lambda 完成所有验证和解码(可能使用 JWT 的第三方库)。在前端这样做是不安全的,因为这意味着您有一个 lambda,它盲目地接受来自前端的属性作为事实,并且恶意用户可以根据需要更改它们。

    如果您使用 API Gateway 将 lambdas 放在 API 后面,那么我将基于用户池创建一个认知授权器,创建一个资源/方法并将其配置为使用授权器,并为 @987654324 启用 Use Lambda Proxy Integration @。只要有效,为客户端启用的所有令牌声明都将通过 event.requestContext.authorizer.claims 传递。

    有一些 AWS 文档 here,尽管这不使用代理集成。如果您使用代理集成,那么您可以跳过 6b,因为 APIG 将为您设置值。这在答案here 中有所描述。

    【讨论】:

      猜你喜欢
      • 2017-08-12
      • 2020-04-21
      • 2021-05-06
      • 2020-10-07
      • 2020-12-03
      • 1970-01-01
      • 2017-07-19
      • 2017-08-25
      • 2018-02-21
      相关资源
      最近更新 更多