在 lambda 中获取 Cognito 验证码以使用本地提供商发送短信

Get Cognito verification code in lambda to send SMS using local provider

我想在不使用 AWS SNS 的情况下使用我所在国家/地区的本地提供商将验证码作为短信发送给用户。

我在 CustomMessage 中有一个触发器,并且 lambda 函数工作正常。但我的问题是我无法在 lambda 中找到验证码 function.Only 找到代码参数是 {####}.

那么如何获取验证码并使用本地提供商发送呢?

您需要在这种情况下实施自定义身份验证。因为 Cognito 不会与您分享秘密。我们已经使用 Cognito 自定义身份验证机制实现了自定义身份验证方案。

您可以使用 DefineAuth、CreateAuth 和 VerifyAuth 触发器来实现。请参考以下流程

https://aws.amazon.com/blogs/mobile/customizing-your-user-pool-authentication-flow/

对于那些寻找替代解决方案的人,我建议使用 Cognito 的自定义 SMS 发件人触发器。当您使用自定义 SMS 触发器时,您不必实施自定义身份验证机制。

自定义 SMS 发送器触发器将使您能够获取加密代码参数,然后您可以使用您为用户池配置的 KMS 密钥对其进行解密。

您可以遵循的步骤:

  1. 创建 KSM 密钥。
  2. 创建自定义 SMS 发件人 lambda 函数。这个函数应该可以执行kms:decrypt操作。
  3. 在 lambda 函数中实现您的自定义短信逻辑。既然你现在有了代码参数,这就很容易了。
  4. 授予您的用户池访问权限以调用自定义短信发送器功能。
  5. 为您的用户池设置自定义短信发送器触发器。当您这样做时,您还需要设置 Cognito 将使用的 KMS 密钥。您可以使用 aws-cli 来执行此操作。

参考文献:

Official documentation

Terraform 目前不支持自定义短信发送器触发器。关于这个

有一个open issue

Aws cli update user pool