Amazon dynamodb 将DynamoDB项映射到Cognito用户池对象

Amazon dynamodb 将DynamoDB项映射到Cognito用户池对象,amazon-dynamodb,federated-identity,aws-cognito,Amazon Dynamodb,Federated Identity,Aws Cognito,我正在研究Cognito用户池、联邦身份和DynamoDB。为了实现细粒度的访问控制,我必须在DynamoDB表中使用Cognito标识Id,因为用户池中的任何内容都不能在IAM策略中引用。值得一提的是,${cognito identity.amazonaws.com:sub}指的是身份id,而不是我们在cognito用户池中看到的“sub” 问题是如何将DynamoDB中的项映射到用户联系人 例如,考虑一个场景,如果我的应用程序的用户有未决的付款,并且如果我必须与他联系付款。或者,如果一个用户

我正在研究Cognito用户池、联邦身份和DynamoDB。为了实现细粒度的访问控制,我必须在DynamoDB表中使用Cognito标识Id,因为用户池中的任何内容都不能在IAM策略中引用。值得一提的是,
${cognito identity.amazonaws.com:sub}
指的是身份id,而不是我们在cognito用户池中看到的“sub”

问题是如何将DynamoDB中的项映射到用户联系人


例如,考虑一个场景,如果我的应用程序的用户有未决的付款,并且如果我必须与他联系付款。或者,如果一个用户报告了一个问题,我必须查找他的数据以进行典型的客户支持。

由于您已经可以从您的数据库中获取应用程序用户的数据,并使用其唯一的Cognito标识id,剩下的就是获取用户的电子邮件地址。你可以通过两种方式来做到这一点。我将以Android为例

您可以分析电子邮件属性的JWT id令牌。有关详细信息,请参阅此堆栈溢出答案:

或者,您可以这样做:

CognitoUserPool userPool = new CognitoUserPool(context, userPoolId, clientId, clientSecret);

CognitoUser user = userPool.getUser(userId);

GetDetailsHandler handler = new GetDetailsHandler() {
    @Override
    public void onSuccess(final CognitoUserDetails list) {
        // Successfully retrieved user details
        Map mDetails = list.getAttributes().getAttributes();
        String email = mDetails.get("email").toString(); // your user email address
        // do stuff with the email address
    }
};
user.getDetails(handler);
从AWS文件: