我使用来自cognito的亚马逊开放ID令牌兑换的凭据收到Invalid access key
错误
这就是我正在做的事情
获取开发人员身份验证的开放ID令牌
cognito.getOpenIdTokenForDeveloperIdentity(params,function(err,data){
openIdToken = data.credentials });
兑换开放式ID令牌以获取安全凭据,我将params设置为congnito Auth角色并设置任意角色会话名称。我使用步骤1中的令牌。我没有在步骤1中设置身份ID的地方。
it('should be able to exchange temporary open id token for auth credentials', function (done) {
var sts = new AWS.STS();
var params = {
RoleArn: roleArn,
RoleSessionName: 'photo-upload-session',
WebIdentityToken: openIdToken.Token
};
sts.assumeRoleWithWebIdentity(params, function(err, data) {
should.not.exist(err);
should.exist(data.Credentials.AccessKeyId);
should.exist(data.Credentials.SecretAccessKey);
should.exist(data.Credentials.SessionToken);
credentials = data.Credentials;
done();
});
});
我更新了当前的凭据
AWS.config.update({accessKeyId : credentials.AccessKeyId, secretAccessKey:credentials.SecretAccessKey});
我将文件上传到s3并收到[InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.]
错误
*使用Bob Kinney的建议进行编辑我尝试了两种方法 - 设置sessionToken(有效)并使用Congito凭据,这会产生TypeError而不是缓冲区错误。 CognitoIdentityCredentials示例如下所示。
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId:config.get('aws_identity_pool_id'),
Logins: {
'cognito-identity.amazonaws.com': openIdToken.Token
}
});
var body = fs.createReadStream(__dirname + '/test_photo.jpg');
var s3obj = new AWS.S3({params: {Bucket: 'test-uploads', Key: 'test'}});
s3obj.upload({Body: body}).
on('httpUploadProgress', function(evt) { console.log(evt); }).
send(function(err, data) {
should.not.exist(err);
done();
});
**更新
因此,回到java客户端错误,我们使用openid令牌(经测试与sts.assumeRoleWithWebIdentity一起正常工作)并将该令牌传递给AWSAbstractCognitoIdentityProvider的扩展名(代码取自此链接{{3然后使用该标识上传到s3获取错误
CustomAwsIdentityProvider provider = CustomAwsIdentityProvider.newInstance(this, BuildConfig.AWS_COGNITO_POOL_ID, Regions.US_EAST_1);
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(this, provider, Regions.US_EAST_1);
TransferManager tm = new TransferManager(credentialsProvider);
tm.upload("my-upload", uuid.toString(), file);
答案 0 :(得分:2)
很抱歉这些问题。您似乎正在使用JavaScript SDK。使用此流时,您可以使用AWS.CognitoIdentityCredentials
中提到的标准cognito-identity.amazonaws.com
对象,使用getOpenIdTokenForDeveloperIdentity
的密钥,并将值作为AWS.CognitoIdentityCredentials
调用返回的OpenId Connect令牌
您看到错误的原因是您没有从STS结果中包含sessionToken。使用AWS.CognitoIdentityCredentials
对象应该为您解决此问题。
更新2015-07-21: SDK中存在一个小问题,不幸的是会阻止AWS.CognitoIdentityCredentials
按照我的描述工作。我们正在努力减轻这个问题。
更新2015-07-24:您应该能够使用以下内容将AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'MY_IDENTITY_POOL',
IdentityId: data.IdentityId,
Logins: {
'cognito-identity.amazonaws.com': data.Token
}
});
与您的开发人员身份验证标识一起使用:
GetOpenIdTokenForDeveloperIdentity
数据是来自F1::
Gui, Show, center center h500 w500, Just a window
return
F2::
MsgBox, 0, F2, You have pressed F2 inside the F1 hotkey
return
return
的回复。