You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Twilio与AWS Cognito集成实现座机MFA OTP语音验证?

AWS Cognito 集成 Twilio 实现座机语音OTP的MFA方案

完全可以实现这个需求。AWS Cognito支持通过自定义Lambda触发器扩展认证流程,刚好能对接Twilio的语音API,替代默认的短信/邮件MFA,实现向用户座机拨打电话发送OTP的功能。

具体实现步骤:

  • 1. 准备Twilio资源
    注册Twilio账号,获取以下信息:

    • Account SID 和 Auth Token(在Twilio控制台的账户信息板块)
    • 一个支持语音呼叫的Twilio电话号码(控制台购买即可,注意选择能拨打目标地区座机的号码)
  • 2. 编写对接Twilio的Lambda函数
    创建一个Lambda函数,用来生成OTP并调用Twilio语音API发起呼叫,需关联Cognito的几个关键认证触发器:

    • Create Auth Challenge:生成随机OTP,调用Twilio向用户座机播放OTP语音,同时把OTP存入Cognito会话参数供后续验证。
    • Verify Auth Challenge Response:验证用户输入的OTP和会话中存储的是否一致。
    • Define Auth Challenge:定义认证流程逻辑,指定需要触发语音OTP挑战。

    示例Python核心代码:

    import random
    import os
    from twilio.rest import Client
    
    def lambda_handler(event, context):
        # 从环境变量读取Twilio配置
        twilio_sid = os.environ["TWILIO_ACCOUNT_SID"]
        twilio_token = os.environ["TWILIO_AUTH_TOKEN"]
        twilio_from = os.environ["TWILIO_PHONE_NUMBER"]
        
        client = Client(twilio_sid, twilio_token)
        
        # 获取用户座机号码(需提前存入Cognito用户属性的phone_number字段)
        user_phone = event["request"]["userAttributes"]["phone_number"]
        # 生成6位随机OTP
        otp = ''.join(random.choices('0123456789', k=6))
        
        # 调用Twilio语音API,播放OTP语音提示
        client.calls.create(
            to=user_phone,
            from_=twilio_from,
            twiml=f'<Response><Say language="zh-CN">您的验证码是{otp}</Say></Response>'
        )
        
        # 将OTP存入会话,供验证阶段使用
        event["response"]["privateChallengeParameters"] = {"otp": otp}
        event["response"]["challengeMetadata"] = "VOICE_OTP_CHALLENGE"
        
        return event
    

    注意:给Lambda配置Twilio的环境变量,同时确保Lambda能访问公网(如果在VPC内,需配置NAT网关),超时时间设置为10秒以上。

  • 3. 配置Cognito用户池触发器
    进入Cognito用户池的「触发器」页面,将Define Auth Challenge、Create Auth Challenge、Verify Auth Challenge Response三个触发器关联到刚才创建的Lambda函数。
    另外,确保用户池的MFA设置为「可选」或「强制」,且用户属性中已正确存储座机号码(格式需带国家代码,比如+86xxxx)。

  • 4. 测试流程
    用户登录时,输入账号密码后,Cognito会触发Lambda函数,Twilio向用户座机拨打电话并播放OTP;用户输入OTP后,Cognito验证通过即可完成登录。

注意事项:

  • Twilio语音API支持全球大部分地区的座机号码,需确保号码格式正确(带国家代码)
  • 可在Lambda中添加呼叫失败的重试逻辑或 fallback 方案(比如短信备份)
  • 监控Lambda的执行日志,排查可能的呼叫失败或认证问题

内容的提问来源于stack exchange,提问作者Wumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:45:25