我有javascript客户端与提供商(Facebook,谷歌,Twitter等)执行aws cognito认证登录。我可以看到它获得Credential的成功:
var cognitoParam = {
'IdentityPoolId': 'ap-northeast-1:c8250ce6-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
'RoleArn': 'arn:aws:iam::xxxxxxxxxxxx:role/roleName'
'Logins': {
'accounts.google.com': response.detail.id_token
}
};
var cognitoCred = new AWS.CognitoIdentityCredentials(cognitoParam);
它返回所有凭证对象。我还检查了AWS控制台,池ID已在联合身份池中列出/记录为经过身份验证的提供者登录。
获取凭据后,我希望使用Cognito Sync Manager将多个用户信息存储到云中:
var syncManager = new AWS.CognitoSyncManager();
syncManager.openOrCreateDataset('profileSet', function(err, dataset) {
// dataset.get
// dataset.put
// dataset.remove
});
所有方法(get,put,remove)运行良好,但我遇到运行方法同步的问题。例如,在放入新数据集之后:
dataset.put("keyTes", "english", function(err,record){
if(!err){
dataset.synchronize({
onSuccess: function(dataset, newRecords) {
console.log(newRecords);
},
onFailure: function(err) {
console.log("Error while synchronizing data to the cloud: " + err);
}
});
}
});
显示错误:
将数据同步到云时出错:AccessDeniedException: 用户: 阿尔恩:AWS:STS :: XXXXXXXXXXXX:假设角色/ ROLENAME /网络身份 无权执行:cognito-sync:资源上的ListRecords: ARN:AWS:cognito同步:AP-东北-1:XXXXXXXXXXXX:identitypool / AP-东北-1:c8250ce6-XXXX-XXXX-XXXX-XXXXXXXXXXXX /同一性/ AP-东北-1:653aeca2-XXXX-XXXX-XXXX- XXXXXXXXXXXX /数据集/ profileSet
在我的IAM角色中,我设置为:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "default"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}
和政策:
{ “版本”:“2012-10-17”, “声明”:[ { “行动”:“认知同步:”, “效果”:“允许”, “资源”:“” } ] }
我遵循链接中的参考:
Amazon Cognito Sync Manager for JavaScript
有人可以帮助我吗?
答案 0 :(得分:0)
它已经解决了。我更换了我的IAM角色参数时错了。一切都是对的,只有我的错误脚本。
谢谢