首页 文章

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

提问于
浏览
2

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

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

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

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

2 回答

  • 3

    API Gateway最近推出了对Cognito User Pool Authorizer的支持 . 使用Cognito User Pool Authorizer配置API方法后,您可以将Authorization标头中未过期的ID Token传递给API方法 . 如果它是您的用户池用户的有效ID令牌,则可以使用'$ context.authorizer.claims'访问API中ID令牌的所有声明 . 例如,'$ context.authorizer.claims.email'将返回用户的电子邮件地址,'$ context.authorizer.claims.sub'将返回用户的唯一标识符 . 如果ID令牌已过期或无效,Cognito用户池授权程序将向调用者发送未授权(401)响应 .

    您可以从他们的出版物中读取,您可以从授权 Headers 的未到期ID令牌中获取声明 .

  • 0

    我正在做同样的事情 - 使用用户池进行身份验证,然后使用id_token生成联合身份,我用户点击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

相关问题