首页 > 解决方案 > 从 lambda 访问用户信息

问题描述

我正在使用 aws 开发无服务器应用程序。

我使用 AWS Cognito 用户池来管理用户:注册、登录、注销。确认这些用户后,我使用 AWS Cognito 身份池获取临时凭证。然后我使用这些凭证访问 api(我的 api 上的端点需要 AWS_IAM 进行身份验证并调用 lambda)。

所有这些都完美无缺。但我需要知道哪个用户请求了该操作。在 lambda 中,我可以从我的身份池中获取 IdentityId。但我需要从用户池中的用户那里获取属性。

所以我的问题是:有没有办法使用附加到它的身份的 IdentityId 从用户池中获取用户?或者至少,获取访问令牌?我知道我可以在标头中发送访问令牌,但我只想依赖 AWS_IAM 身份验证。

标签: aws-lambdaaws-api-gatewayamazon-cognito

解决方案


从联合identity_id用户返回用户池用户很棘手,因为不能保证它用户池用户(很可能是来自 Facebook 的某个人,甚至是未经身份验证的用户 - 取决于您的配置)。

  1. 给定一个IdentityId你可以使用identity:GetOpenIdToken来获取一个有效的 OpenId 令牌(如果你只是使用 UserPools,你可以忽略请求的一部分logins

  2. 然后,您可以针对userpools:GetUser端点使用此令牌。

这里有一些陷阱,例如确保您使用允许您查看所有您关心的属性的范围进行身份验证。如果还没有,那么您需要使用username返回的userpools:AdminGetUser来获取完整的用户配置文件。


推荐阅读