我已设置AWS SDK for iOS以使用Amazon Cognito进行身份验证。以下是执行此操作的代码:
let credentials = AWSCognitoCredentialsProvider(regionType: .USEast1,
identityPoolId: IdentityManager.identityPoolId,
identityProviderManager: self)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = AWSServiceConfiguration(region: .USEast1,
credentialsProvider: credentials)
我可以使用此凭据提供程序成功获取身份ID。从这里开始,我尝试设置一个API网关生成的客户端来调用我的lambda函数。
let client = APIGatewayClient.defaultClient()
client.endpointGet() { task in
}
我已确认APIGatewayClient
已将AWSCognitoCredentialsProvider
附加到configuration
属性,并逐步执行请求签名代码,以确保其请求得到正确签名。
以下是客户端调用的Lambda函数:
exports.handler = function(event, context) {
console.log('context: ' + require('util').inspect(context));
if (context.identity) {
context.succeed("found cognito identity")
} else {
return context.fail(new Error("cognito identity not found"))
}
}
问题是,即使请求是使用context.identity
签名,AWSCognitoCredentialsProvider
也为空。我需要采取哪些其他步骤来确保Lambda识别我的请求是使用Cognito身份签名并填充context
对象中的相关字段?
答案 0 :(得分:3)
为了让您的lambda函数中的Cognito标识对象可以通过API网关调用,您需要在API网关资源的API网关“集成请求”页面上启用“调用调用者凭据”。这将在lambda上下文中注入标识对象,其中将包含cognitoIdentityId和cognitoIdentityPoolId。
一些类似的帖子:
SO:AWS API Gateway: How to pass IAM identity to Lambda function?
AWS论坛:https://forums.aws.amazon.com/message.jspa?messageID=669060#669060
希望这有帮助。