如何使用Firebase实现自定义双因素认证并集成Authy OneTouch
思路正确性评估
你的整体实现逻辑是通顺的,符合Firebase自定义身份认证流程的设计规范,但有几个可以优化和需要注意的点:
- 步骤3里你在拿到MFA声明存在后直接登出用户的操作其实可以省略,因为你已经把持久化策略设为
NONE了,用户关闭页面/刷新就会自动丢失登录状态,而且这个临时的IDToken本身有效期只有1小时,登出操作不会影响安全性,但是可以减少不必要的客户端调用。 - 用户启用MFA的环节,建议增加身份二次校验,比如要求用户重新输入当前账号密码,再调用
setCustomUserClaims和完成Authy注册,避免账号被盗后被恶意开启MFA锁定原用户。 - 步骤5里生成自定义Token的时候,不要把用户密码明文放进自定义声明里,
createCustomToken生成的Token虽然是后端生成的,但用户可以通过客户端SDK拿到Token内容,密码属于敏感信息绝对不能放到任何可被前端获取的Token字段中,只需要放uuid、email、mfa_status: 'passed'这类非敏感字段即可。 - 轮询Authy挑战状态的逻辑建议加超时限制,比如300秒无响应就自动取消挑战,避免客户端长期无效轮询占用资源。
- 后端校验Authy返回信息的时候,一定要调用Authy的服务端校验接口确认挑战确实成功,不能只信任客户端传过来的成功标识,防止伪造请求绕过MFA。
Firebase自定义第二因子能力说明
目前Firebase官方的原生MFA能力确实只支持短信作为第二因子,没有提供直接替换默认第二因子的开放接口,你没有遗漏相关官方功能。如果你不想自己实现完整的自定义MFA逻辑,也可以通过Firebase的自定义身份提供方能力,把Authy的校验逻辑整合到统一的身份认证流程里,但实现成本和你当前的方案差异不大。
内容的提问来源于stack exchange,提问作者NickTheFreak97
相关产品推荐
相关产品推荐

