我尝试使用REST API通过经过身份验证的用户调用我的API网关。为此,我使用:Cognito UserPool + Cognito Identity Pool + API Gateway + AWS_IAM Authorization + Cognito Credentials。根据我收集的内容,我需要用(临时凭证)签署我的请求。根据{{3}},我想使用以下密钥签署我的请求:
{
SecretKey: '',
AccesKeyId: '',
SessionKey: ''
}
如果我使用IAM控制台中的关联用户并使用相应的SecretKey + AccesKeyID,一切正常。但是,我想使用我的身份池中的未经身份验证和验证的角色来根据经过身份验证或未经身份验证的用户应用IAM策略。 仅供参考:我可以从this thread
调用经过身份验证的函数我正在构建一个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;
}];
其余的我已使用this part of the documentation.
进行设置我(错误地?)试图用中签署我的请求 从上面的 CredentialsProvider 中检索到的 AccessKey , SecretKey , SessionKey 。
{
SecretKey: credentials.SecretKey,
AccesKeyId: credentials.AccessKey,
SessionKey: credentials.SessionKey
}
签名失败,并出现以下错误:
{ message: 'The security token included in the request is invalid.' }
所以我的问题是:我应该使用哪些密钥来签署对经过身份验证的用户的请求,以便我可以从Cognito安装程序应用附加的IAM策略?
感谢您的帮助:)
答案 0 :(得分:0)
像迈克尔 - sqlbot一样,指出它应该是 SessionToken 而不是 SessionKey 。我在how to get credentials from Cognito找到了更好的指导。