在 AWS Cognito 的 lambda 触发器函数中,例如
Post confirmation trigger
或 Post authentication trigger
,我想获取 ID 令牌,以便我可以代表用户查询一些其他服务。
这可能吗?如果可以,怎么做?
如果您还可以提供一个 Javascript 和/或 Python 的小示例,那就太好了。
确认流程根本不生成用户令牌,身份验证流程的后触发与生成和签署令牌的过程并行触发。即使失败,它也看不到令牌,并且对令牌生成没有影响。
根据定义,ID 令牌确认您的用户的身份。这个想法是,将令牌提供给用户代理(浏览器或移动应用程序或其他),并且它作为用户代理,使用它代表用户执行任何需要完成的操作,并承担全部责任因其行动。如果令牌最终出现在错误的位置(或正确的位置),我们可以确定无论事件链导致什么,它都是从用户代理开始的。
第三方(不是用户代理)使用令牌将违反此原则。
如果您要代表用户查询的服务位于 AWS 中,您只需在触发器中承担适当的 IAM 角色并执行您需要执行的操作。
如果它们是第三方服务,您将需要生成单独的令牌。您可以通过调用
AdminInitiateAuth
来做到这一点(但是如果用户设置了 MFA,这会触发 MFA,想想看,这才是公平的),或者以其他方式验证触发器(通过使用共享密钥或这些服务提供的长期访问令牌或其他东西)
最后,您可以通过让用户代理调用 API 网关端点或其他内容并提供刚刚收到的令牌来实现此逻辑。这将需要额外的往返,这需要时间(并且可能会失败)。
同样,如果您要为用户代理生成令牌,则用户代理应该始终是第一个提供令牌的人。您的触发器是一个单独的实体,必须提供自己的凭据。