aws-lambda - 从 lambda 访问用户信息
问题描述
我正在使用 aws 开发无服务器应用程序。
我使用 AWS Cognito 用户池来管理用户:注册、登录、注销。确认这些用户后,我使用 AWS Cognito 身份池获取临时凭证。然后我使用这些凭证访问 api(我的 api 上的端点需要 AWS_IAM 进行身份验证并调用 lambda)。
所有这些都完美无缺。但我需要知道哪个用户请求了该操作。在 lambda 中,我可以从我的身份池中获取 IdentityId。但我需要从用户池中的用户那里获取属性。
所以我的问题是:有没有办法使用附加到它的身份的 IdentityId 从用户池中获取用户?或者至少,获取访问令牌?我知道我可以在标头中发送访问令牌,但我只想依赖 AWS_IAM 身份验证。
解决方案
从联合identity_id
用户返回用户池用户很棘手,因为不能保证它是用户池用户(很可能是来自 Facebook 的某个人,甚至是未经身份验证的用户 - 取决于您的配置)。
给定一个
IdentityId
你可以使用identity:GetOpenIdToken来获取一个有效的 OpenId 令牌(如果你只是使用 UserPools,你可以忽略请求的一部分)logins
。然后,您可以针对userpools:GetUser端点使用此令牌。
这里有一些陷阱,例如确保您使用允许您查看所有您关心的属性的范围进行身份验证。如果还没有,那么您需要使用username
返回的userpools:AdminGetUser来获取完整的用户配置文件。
推荐阅读
- django - 如何使用 PWA 在 nginx 中允许 django 视图 /
- java - 使用 COM 端口从嵌入式控制器读取数据
- django - django-rest-auth:自定义注册序列化程序不保存自定义字段
- flutter - Flutter Provider 中的选择器不起作用
- c# - 添加连接引用的缺点-vs2019中的WCF服务
- javascript - 有没有办法将滑块重置为图像 1?
- javascript - 如何从ckeditor中删除特定按钮
- r - 在 R 中对调查数据进行行/列百分比?
- clojure - 如果评估,为什么这两个表达式都在这个 clojure 中?
- amazon-web-services - 如何在 aws 子组织中运行 terraform 脚本?