Cognito Identity 未传递到 AWS Lambda 函数中

Cognito Identity Not Passed Into AWS Lambda function

我已经为 iOS 设置了 AWS 开发工具包以使用 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


}

我已确认 APIGatewayClientconfiguration 属性 附加了 AWSCognitoCredentialsProvider 并逐步执行请求签名代码以确保其请求得到签名正确。

这是客户端调用的 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 对象中的相关字段?

为了在通过 API 网关调用的 lambda 函数中使用 Cognito 身份对象,您需要在 API 网关上启用 "Invoke with caller credentials" "Integration Request" API 网关资源的页面。这将在 lambda 上下文中注入身份对象,其中包含 cognitoIdentityId 和 cognitoIdentityPoolId。

一些类似的帖子:

所以:AWS API Gateway: How to pass IAM identity to Lambda function?

AWS 论坛:https://forums.aws.amazon.com/message.jspa?messageID=669060#669060

希望对您有所帮助。