如何使用 WhatsApp 发送 Amazon Cognito 通知消息 安全博客
  • 26

使用WhatsApp发送Amazon Cognito通知消息指南

由Nideesh K T和Reethi Joseph于2024年5月13日发表在进阶(300) Amazon Cognito 安全性、身份验证和合规性永久链接评论 分享

主要重点

WhatsApp已成为一种有效的用户互动工具,2024年其全球活跃用户超过20亿。Amazon Cognito允许使用自定义SMS发送者AWS Lambda触发器来使用第三方服务发送通知。本文将介绍如何将WhatsApp作为第三方服务,发送验证码或多因素验证MFA码。

虽然传统的渠道如电子邮件和SMS仍然重要,但企业越来越多地探索替代的消息服务,以更有效地接触其客户。近年来,WhatsApp作为一种简单且有效的用户互动方式逐渐浮现。根据Statista,截至2024年,WhatsApp已成为全球最受欢迎的移动消息应用,并在2024年1月达到了超过20亿的月活跃用户。

pixiv手机版梯子

Amazon Cognito允许你将用户注册和身份验证添加到你的移动和网络应用中。在许多其他功能中,Cognito提供了一个自定义SMS发送者AWS Lambda触发器,用于使用第三方提供商发送通知。在本文中,我们将使用WhatsApp作为第三方提供商,以取代SMS,在Cognito用户池注册期间发送验证码。

注意:WhatsApp是一个第三方服务,受额外条款和费用的约束。亚马逊网络服务AWS对你使用自定义SMS发送者在Amazon Cognito中发送消息的第三方服务不承担任何责任。

概述

默认情况下,Amazon Cognito使用Amazon简单通知服务Amazon SNS发送SMS文本消息。Cognito还支持自定义触发器,这可以让你调用一个AWS Lambda函数,以支持额外的提供商,如WhatsApp。

图1展示了如何使用自定义SMS发送者触发器和WhatsApp发送通知的架构。具体步骤如下:

如何使用 WhatsApp 发送 Amazon Cognito 通知消息 安全博客用户注册Amazon Cognito用户池。Cognito调用自定义SMS发送者Lambda函数,并将用户的属性包括电话号码和一个一次性代码发送给Lambda函数。这个一次性代码使用你创建的自定义对称加密AWS KMS密钥进行加密。Lambda函数使用AWS KMS的Decrypt API调用来解密一次性代码。Lambda函数然后从AWS Secrets Manager获取WhatsApp访问令牌。WhatsApp的访问令牌需要通过Meta Business Settings生成下一部分会详细介绍,并添加到Secrets Manager中。Lambda还会解析电话号码、用户属性和加密的密钥。Lambda向WhatsApp API发送POST API调用,WhatsApp将验证码作为消息发送给用户。用户然后可以使用该验证码来确认其联系信息并确认注册。

先决条件

如果你还没有AWS帐户,请创建一个AWS帐户并登录。你所使用的AWS身份和访问管理IAM角色必须拥有足够的权限,以进行必要的AWS服务调用和管理AWS资源,例如创建和更新Lambda函数、Amazon Cognito用户池、Secrets Manager、AWS KMS密钥和IAM角色。一个MetaFacebook开发者帐户。欲了解更多详情,请访问Meta for Developers console。安装Git。安装并配置AWS Cloud Development Kit (AWS CDK)工具包。安装Nodejs及其NPM。安装并运行Docker。

实施步骤

在接下来的步骤中,我们将介绍如何创建Meta应用、创建新的系统用户、获取WhatsApp访问令牌并创建发送WhatsApp令牌的模板。

创建并配置WhatsApp通信应用

要开始,创建一个Meta应用,并将WhatsApp添加到该应用中,并包含将用于测试的客户电话号码。

创建和配置应用步骤打开Meta for Developers控制台,选择我的应用,然后选择创建应用或选择一个现有的商业类应用,跳到第4步。选择其他,然后点击下一步,选择商业作为应用类型,然后点击下一步。输入应用的名称、联系邮件,选择是否要附加商业投资组合,然后选择创建应用。打开应用仪表板,在将产品添加到您的应用部分下,选择WhatsApp,然后点击设置。创建或选择一个现有的Meta商业投资组合并选择继续。在左侧导航窗格中,选择WhatsApp,然后选择API设置。在发送和接收消息下,记下电话号码ID,稍后在AWS CDK模板中需要使用。在至下,添加要用于测试的客户电话号码。按照指示添加并验证该电话号码。

注意:你必须在该号码上注册WhatsApp,并且WhatsApp客户端必须安装在你的移动设备上。

创建WhatsApp访问用户

在Meta的Business Manager中创建一个系统用户,并将其分配给在上一步中创建的应用。对于这个用户生成的访问令牌将用于进行WhatsApp API调用。

创建用户步骤打开Meta的Business Manager并从商业设置下拉菜单中选择你之前创建或关联的商业。在用户下,选择系统用户,然后选择添加以创建新的系统用户。为系统用户名输入名称,设置其角色为管理员,然后选择创建系统用户。选择分配资产。从选择资产类型列表中选择应用。在选择资产下,选择你的WhatsApp应用名称。在部分访问下,为该用户启用测试应用选项。选择保存更改,然后选择完成。选择生成新令牌,选择先前创建的WhatsApp应用,并将默认的60天作为令牌过期。选择WhatsAppbusinessmessaging和WhatsAppbusinessmanagement的权限,然后选择底部的生成令牌。复制并保存你的访问令牌,稍后在AWS CDK模板中会用到它。选择确定。有关生成访问令牌的更多详细资讯,请参阅WhatsApp商业管理API入门指南。

创建WhatsApp模板

创建一个用于发送的验证消息模板。

创建模板步骤打开Meta的WhatsApp Manager。在左侧图标面板中,在帐户工具下,选择消息模板,然后选择创建模板。选择身份验证作为类别。对于名称,输入otpmessage。对于语言,输入英语。单击继续。在下一屏幕中,选择复制代码,然后选择提交。

注意:Meta可能会更改该流程或UI。请参阅Meta文档以获取具体细节。

欲了解有关WhatsApp模板的更多信息,请参见创建和管理模板。

创建Secrets Manager秘密

使用Secrets Manager控制台创建一个Secrets Manager秘密,并将该秘密设置为WhatsApp访问令牌。

创建立秘密步骤打开AWS管理控制台,并转到Secrets Manager。

选择存储新秘密。

在选择秘密类型下,选择其他类型的秘密,并在键/值对下,选中纯文本选项卡,输入“Bearer”后跟WhatsApp访问令牌Bearer 。

对于加密密钥,你可以使用Secrets Manager创建的AWS KMS密钥或自己创建的客户管理AWS KMS密钥,然后选择下一步。提供秘密名称为WhatsAppAccessToken,选择下一步,然后选择存储来创建秘密。记下秘密的Amazon Resource Name (ARN),以便在后续步骤中使用。

部署解决方案

在本节中,你将克隆GitHub库并部署堆栈以在你的帐户中创建资源。

克隆库步骤

创建一个新目录,在终端机中导航到该目录,并使用以下命令克隆包含Lambda和AWS CDK代码的GitHub库:

bashgit clone https//githubcom/awssamples/amazoncognitowhatsappotp

进入模式目录:

bashcd amazoncognitowhatsappotp

部署堆栈步骤

在constantsts文件中配置从WhatsApp获得的电话号码ID、秘密名称、秘密ARN和Amazon Cognito用户池自助注册选项。打开lib/constantsts文件并编辑字段。SELFSIGNUP值必须设置为true,以满足此概念验证的目的。SELFSIGNUP值代表Amazon Cognito用户池注册选项的布尔值,当设置为true时,允许公众用户注册。

typescriptexport const PHONENUMBERID = lt电话号码IDgt export const SECRETNAME = ltWhatsAppAccessTokengt export const SECRETARN = arnawssecretsmanagerltAWS区域gtlt电话号码IDgtsecretltWhatsAppAccessTokengt export const SELFSIGNUP = lttruegt

警告:如果启用用户注册启用自注册在你的用户池中,则互联网上的任何人都可以注册账户并登录到你的应用程序。

运行以下命令来安装AWS CDK所需的依赖项:

bashnpm install

本项目使用TypeScript作为AWS CDK客户端语言。运行以下命令以将TypeScript编译为JavaScript:

bashnpm run build

从命令行配置AWS CDK如果尚未配置:

bashcdk bootstrap lt帐户号gt/ltAWS区域gt

安装并运行Docker。我们在AWS CDK代码中使用了awslambdapythonalpha包来构建Lambda部署包。该部署包在Lambda兼容的Docker容器中安装所需的模组。

部署堆栈:

bashcdk synthcdk deploy all

测试解决方案

现在你已经完成了实施,是时候通过在Amazon Cognito上注册用户来测试解决方案,并确认Lambda函数被调用并发送验证码。

测试步骤打开AWS CloudFormation控制台。选择通过AWS CDK部署的WhatsappOtpStack。在输出选项卡中,复制cognitocustomotpsenderclientappid的值。

运行以下AWS命令行界面AWS CLI命令,将client ID替换为cognitocustomotpsenderclientappid的输出,以及用户名、密码、电子邮件地址、姓名、电话号码和AWS区域以注册新的Amazon Cognito用户。

bashaws cognitoidp signup clientid ltcognitocustomsmssenderclientappidgt username lt测试用户电话号码gt password lt密码gt userattributes Name=emailValue=lt测试用户电子邮件gt Name=nameValue=lt测试用户姓名gt Name=phonenumberValue=lt测试电话号码gt region ltAWS区域gt

范例:

bashaws cognitoidp signup clientid xxxxxxxxxxxxxx username 12065550100