Я новичок в AWS, изучаю Cognito.
Я успешно создал очень простую систему S3 + cognito + lambda (через шлюз API), в которой authtoken использовался в заголовках вызова API к lambda (после действительного входа в систему как пользователь cognito).
Сейчас я работаю над потоком S3 + cognito + DynamoDB без лямбды, где javascript (в браузере) имеет прямой доступ к DynamodB (после действительного входа в систему как пользователь cognito).
эта ссылка AWS мне очень помогла, но я все еще не могу добиться успеха ..
Вот мой код:
var cognitoUser =userPool.getCurrentUser();
AWS.config.region = _config.cognito.region;
cognitoUser.getSession(function(err,result) {
if (result) {
var UserPoolId = _config.cognito.userPoolId;
console.log("you are now logged in to userpool:"+UserPoolId);
var provider ='cognitoidp.'+_config.cognito.region+'.amazonaws.com/'+UserPoolId;
console.log('provider:'+provider);
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: _config.cognito.IdentityPoolId,
Logins: {
provider: result.getIdToken().getJwtToken()
}
});
}
});
AWS.config.credentials.get(function(err) {
if (!err) {
console.log("Cognito Identify Id: " + AWS.config.credentials.identityId);
}
else {
console.log(err, err.stack);
}
});
... dynamodb operation..
Журнал консоли (с помощью Chrome Developer Tool) показывает,
view.js:78 you are now logged in to userpool:ap-northeast-1_XXXXXXXXX
view.js:81 provider:cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_XXXXXXXXX
cognito-identity.ap-northeast-1.amazonaws.com/:1 POST https://cognito-identity.ap-northeast-1.amazonaws.com/ 400 (Bad Request)
view.js:101 Error: Invalid login token. Issuer doesn't match providerName
at constructor.i (aws-sdk-2.226.1.min.js:49)
at constructor.callListeners (aws-sdk-2.226.1.min.js:50)
at constructor.emit (aws-sdk-2.226.1.min.js:50)
at constructor.emitEvent (aws-sdk-2.226.1.min.js:50)
at constructor.e (aws-sdk-2.226.1.min.js:49)
at a.runTo (aws-sdk-2.226.1.min.js:51)
at aws-sdk-2.226.1.min.js:51
at constructor.<anonymous> (aws-sdk-2.226.1.min.js:49)
at constructor.<anonymous> (aws-sdk-2.226.1.min.js:50)
at constructor.callListeners (aws-sdk-2.226.1.min.js:50)
"NotAuthorizedException: Invalid login token. Issuer doesn't match providerName
Без параметров "Logins" для AWS.CognitoIdentityCredentials все в порядке.
(«Cognito Identify Id:» показывает возвращенный Id). Но это «неаутентифицировано». таким образом, чтобы разрешить доступ к DynamoDB, мне пришлось прикрепить требуемую политику к Cognito_myIDPoolName_UnauthRole, который был автоматически создан во время создания федеративного удостоверения mgmt.
Я хотел бы избежать такого дополнительного присоединения политики к неаутентифицированному пользователю ..
Любой совет будет высоко ценится.