我正在尝试使用REST API与经过身份验证的用户一起调用我的API网关。为此,我使用:Cognito用户池+Cognito标识池+API网关+AWS_IAM授权+Cognido凭据。根据我收集到的信息,我需要用(临时凭据)签署我的请求。基于这个线程,我想用以下密钥签署我的请求:
{
SecretKey: '',
AccesKeyId: '',
SessionKey: ''
}
如果我从IAM控制台使用关联用户并使用相应的SecretKey+AccsKeyID,一切都会正常工作。但是,我希望使用我的身份池中的未经身份验证和已通过身份验证的角色来基于已验证或未经过身份验证的用户应用IAM策略。仅供参考:我可以从文档的这一部分调用经过身份验证的函数。
我正在构建一个React Native应用程序,正因为如此,我想将原生SDK保持在最低限度,并且我只使用AWSCognitoIdentityProvider
部分。用于用户处理。
我试图使用以下Objective-C代码接收正确的密钥:
[[self.credentialsProvider credentials] continueWithBlock:^id(AWSTask *task) {
if (task.error) {
NSLog(@"Error: %@", task.error);
}
else {
AWSCredentials *response = task.result;
NSString *accessKey = response.accessKey;
NSString *secretKey = response.secretKey;
NSString *sessionKey = response.sessionKey;
NSDictionary *responseData = @{
@"AccessKey" : accessKey,
@"SecretKey" : secretKey,
@"SessionKey": sessionKey
};
}
return nil;
}];
其余部分我已经使用相关文档进行了设置。
我(错误地?)试图用
签署我的请求AccessKey、SecretKeySessionKeyredentialsProvider中检索。
{
SecretKey: credentials.SecretKey,
AccesKeyId: credentials.AccessKey,
SessionKey: credentials.SessionKey
}
签名失败,出现以下错误:
{ message: 'The security token included in the request is invalid.' }
因此,我的问题是:我应该使用哪些密钥来对已验证用户的请求进行签名,以便从我的Cognito安装程序中应用附加的IAM策略?
感谢您的帮助:)
像Michael-sqlbot一样,指出它应该是SessionToken,而不是SessionKey。我找到了关于如何从Cognito获取凭据的更好说明。