Amazon web services 如何在AWS Lambda函数中获取经过Cognito身份验证的用户信息?

Amazon web services 如何在AWS Lambda函数中获取经过Cognito身份验证的用户信息?,amazon-web-services,aws-lambda,aws-sdk,aws-cognito,Amazon Web Services,Aws Lambda,Aws Sdk,Aws Cognito,我正在为我的Angular应用程序开发一个无服务器后端 用户使用AWS Cognito进行身份验证,并可以通过API网关(使用通过API网关控制台生成的SDK)访问AWS Lambda函数 问题:如何获取有关哪个用户正在调用Lambda函数的信息?Lambda函数使用python和boto3 用例:我需要记录用户活动以符合GDPR,因此我需要知道哪个用户正在调用Lambda函数 API网关最近启动了对Cognito用户池的支持 授权人。一旦用Cognoto用户配置了API方法 池授权人,可以在授

我正在为我的Angular应用程序开发一个无服务器后端

用户使用AWS Cognito进行身份验证,并可以通过API网关(使用通过API网关控制台生成的SDK)访问AWS Lambda函数

问题:如何获取有关哪个用户正在调用Lambda函数的信息?Lambda函数使用python和boto3

用例:我需要记录用户活动以符合GDPR,因此我需要知道哪个用户正在调用Lambda函数

API网关最近启动了对Cognito用户池的支持 授权人。一旦用Cognoto用户配置了API方法 池授权人,可以在授权中传递未过期的ID令牌 API方法的标题

如果它是用户池用户的有效ID令牌,则可以 使用访问API中的所有ID令牌声明 “$context.authorizer.claims”

例如“$context.authorizer.claims.email”将返回用户的 电子邮件地址和“$context.authorizer.claims.sub”将返回给您 用户的唯一标识符

如果ID令牌已过期或无效,则Cognito用户池授权者 将向调用方发送未经授权的(401)响应


正如您可以从他们的出版物中所读到的,您可以从授权头的未过期ID令牌中获得声明。

我正在做完全相同的事情-使用用户池进行身份验证,然后使用ID_令牌生成联合身份,我使用该身份访问API网关,连接到Lambda。lambda的CloudWatch日志显示在event.requestContext.identity中传递的详细信息。此对象具有以下特性-

"identity": {
        "cognitoIdentityPoolId": xxxx,
        "accountId": xxxxx,
        "cognitoIdentityId": xxxxxx,
        "caller": "xxxxxx:CognitoIdentityCredentials",
        "sourceIp": "x.x.x.x",
        "accessKey": "xxxxx",
        "cognitoAuthenticationType": "authenticated",
        "cognitoAuthenticationProvider": "********",
        "userArn": "*********",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
        "user": "xxxxxx:CognitoIdentityCredentials"
    }
这是一个部分答案,尽管我还没有弄清楚如何使用上述信息获取实际登录的用户

如果你已经解决了,请分享答案


PS:这是一个nodejs lambda

您使用的是Cognito用户池还是联合身份?两者都使用。我正在使用userpool作为联合身份验证的身份验证程序,所以在API网关中,您正在使用IAM authorizer?是否在Lambda事件对象中检索Cognito ID?作为参考,我认为这篇文章对你很有帮助。你可以从
cognitoAuthenticationProvider
中提取
sub
属性。这样,您就可以从您的用户池请求(listUsers)用户实体。更多信息,请参阅。