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

时间:2019-05-06 09:46:21

标签: amazon-web-services aws-lambda aws-sdk amazon-cognito amazon-sns

我想使用我所在国家/地区的本地提供商将验证码作为SMS发送给移动用户,而不使用AWS SNS。

我在CustomMessage中有一个触发器,lambda函数工作正常。但是我的问题是我无法在lambda函数中找到验证码。只能找到{####}的codeParameter。

那么我如何获取验证码以使用本地提供商发送它?

2 个答案:

答案 0 :(得分:3)

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

您可以使用DefineAuth,CreateAuth和VerifyAuth触发器进行实施。请参考以下流程。

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

答案 1 :(得分:0)

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

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

您可以遵循的步骤:

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

参考文献:

Official documentation

Terraform 目前不支持自定义短信发送者触发器。有一个 open issue 与此相关

Aws cli update user pool