项目场景:

搭建了一套NextCloud私有网盘,为保证数据账号安全。在后台开启了强制TOTP两步验证。

问题描述

在进行TOTP验证后,因为手机丢失导致无法获取TOTP验证码而无法登录Nextcloud。

解决方案:

Nextcloud部署时采用的是Postgresql数据库,首先连接上数据库,在数据库中找到表oc_twofactor_backupcodes,该表中存储的是用户账号和TOTP的密钥。

51b15483ea6161e3ca4138da2f194997.png

通过Nextcloud后台用户菜单找到该用户的用户名,并和表中的用户名进行比对,找到丢失手机的用户数据。

可以看到该表中secret字段数据都是通过加密的,并且不知道是通过何种方式进行加密的,所以想通过解密获取 secret 不太现实。

最终解决方案,找到一个可以进行验证的用户,然后将该用户的 secret 字段的数据复制并覆盖丢失手机用户的 secret 上。然后使用该可验证用户的密码进行验证即可解决。

登录之后在取消并重新开启TOTP即可重新添加两步验证数据。