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

时间:2018-07-02 19:36:17

标签: amazon-web-services aws-lambda aws-sdk aws-cognito

我正在为Angular应用开发无服务器后端。

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

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

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

2 个答案:

答案 0 :(得分:3)

  

API网关最近启动了对Cognito用户池的支持   授权者。使用Cognito用户配置API方法后   池授权者,您可以在授权中传递未过期的ID令牌   API方法的标头。

     

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

     

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

     

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

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

答案 1 :(得分:0)

我正在做完全相同的事情-使用用户池进行身份验证,然后使用id_token生成联合身份,我可以通过该身份访问连接到Lambda的API网关。 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