我正在为Angular应用开发无服务器后端。
使用AWS Cognito对用户进行身份验证,并且可以通过API Gateway(使用通过API Gateway控制台生成的SDK)访问AWS Lambda函数。
问题:如何获取有关哪个用户正在调用Lambda函数的信息? Lambda函数正在使用python&boto3。
用例:我需要记录用户活动以符合GDPR要求,因此我需要知道哪个用户正在调用Lambda函数。
答案 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