AWS Cognito Sync与授权用户

时间:2017-12-14 14:53:51

标签: javascript amazon-web-services amazon-cognito

我已成功为未经授权的用户实施了AWS Cognito,如下所示。对于未经授权的用户,一旦成功返回IdentityId,我就可以使用Cognito Sync成功创建和操作数据集。我无法将Cognito Sync与授权用户一起使用。请有人告诉我如何获得授权用户的IdentityId,然后允许我listRecords(需要IdentityId)。 IdentityId始终以未定义的形式返回。

AWS.config.credentials = new CognitoIdentityCredentials({
    IdentityPoolId: REACT_APP_AWS_CONFIG_IDENTITY_POOL_ID,
});

const userPool = new CognitoUserPool({
    UserPoolId: REACT_APP_AWS_CONFIG_USER_POOL_ID,
    ClientId: REACT_APP_AWS_CONFIG_CLIENT_ID,
});

let cognitosync = new AWS.CognitoSync();

AWS.config.credentials.get(()=>{
    IdentityId = AWS.config.credentials.identityId;
    listRecords();
});

function listRecords(){
    cognitosync.listRecords({
        DatasetName     : DATA_SET_NAME,
        IdentityId      : IdentityId,
        IdentityPoolId  : REACT_APP_AWS_CONFIG_IDENTITY_POOL_ID
    }, function(error, data) {
        //...
    });
 }

提前致谢

2 个答案:

答案 0 :(得分:0)

我怀疑您只需要为Logins对象添加AWS.config.credentials地图,以供经过身份验证的用户使用。

您在Logins地图中放置的内容取决于用户的身份验证方式,但实际上您需要一个条目,身份提供商(IDP)作为密钥,并且您从该IDP收到的ID令牌为价值。

例如,如果您的用户通过Google进行身份验证,您可能会:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx',
    Logins: {
       'accounts.google.com': googleUser.tokenId
    }
});

其中googleUser是Google返回的对象。

如果您的用户使用Cognito用户池进行身份验证,您可能会:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx',
    Logins: {
        'cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx': 
        session.getIdToken().getJwtToken()

    }
});

session传递给您提供给CognitoUser.getSession()的回调。此用例in this Gist的其他代码上下文。

答案 1 :(得分:0)

我发现了我的问题。获取我正在使用的Login键/值的JWT:

result.getAccessToken().getJwtToken()

应该是什么时候:

result.getIdToken().getJwtToken()

现在都在工作