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

无法通过Java API验证Authy TOTP的问题求助

Twilio Verify TOTP验证失败及配置问题

我尝试通过Authy移动应用和TOTP完成用户身份验证,按照官方指南编写了两个测试用例。目前可以成功创建Factor,但无论如何操作都无法验证该Factor,同时还遇到配置参数不生效的问题,具体细节如下:

步骤1:为新用户创建新的Factor

@Test
public void testCreateTotpFactor() {
    log.info("Twilio ACCOUNT_SID=" + ACCOUNT_SID);
    long now = new Date().getTime();
    String userUUID = UUID.randomUUID().toString();
    String username = "TwilioUser" + now;

    Twilio.init(ACCOUNT_SID, AUTH_TOKEN);

    // 创建新的TOTP Factor
    NewFactor newFactor = NewFactor.creator(
                    SERVICE_SID,
                    userUUID,
                    username,
                    NewFactor.FactorTypes.TOTP)
            .setConfigAppId("org.liquido")
            //.setConfigCodeLength(6)
            //.setConfigSkew(1)
            //.setConfigTimeStep(60)
            .create();

    System.out.println("========================");
    System.out.println(newFactor);
    System.out.println("========================");
    System.out.println("TOTP URL           " + newFactor.getBinding().get("uri"));
    System.out.println("Twilio Username:   " + username);
    System.out.println("Twilio userUUID:   " + userUUID);
    System.out.println("Twilio Factor_SID: " + newFactor.getSid());
    System.out.println("========================");
}

步骤2:从TOTP URL生成二维码

这一步可以正常执行,我能在Authy应用中扫描二维码,但如果取消注释代码中的setConfigTimeStep(60),该参数并未生效,时间步长始终为30。请问该如何检查、测试或调试这个配置问题?

步骤3:输入首个TOTP验证Factor

注:此测试用例中的数据需要根据上一步返回的值手动修改,authToken需从Authy应用中获取。

@Test  // 无法自动测试,需手动修改参数后执行
public void testVerifyTotpFactor() {
    // 手动设置上一步测试返回的参数
    String userUUID    = "<userUUID from above>";
    String FACTOR_SID  = "<factorSID from above>";
    String authToken   = "123456";    // Authy应用中显示的当前令牌

    Twilio.init(ACCOUNT_SID, AUTH_TOKEN);

    System.out.println("===========================");
    System.out.println("可用的TOTP Factors (FACTOR_SID):");
    // 列出可用的Factors
    ResourceSet<Factor> factors = Factor.reader(
                SERVICE_SID,
                userUUID)
          .read();
    for(Factor record : factors) {
        System.out.println(record);    // 这一步正常,能看到创建的Factor
    }
    System.out.println("===========================");

    // 更新Factor(验证操作)
    Factor factor = Factor.updater(
                    SERVICE_SID,
                    userUUID,
                    FACTOR_SID)
            .setAuthPayload(authToken).update();
    System.out.println(factor);

    assertEquals(Factor.FactorStatuses.VERIFIED, factor.getStatus(), "Factor应该处于已验证状态");   // 此处始终失败!

    log.info("成功验证TOTP Factor");
}

执行上述验证代码后,Factor始终返回“unverified”状态。请问我遗漏了什么?所有方法的参数是否正确?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:33:15