有没有靠谱的 2FA 验证器推荐?

2024-01-12 01:40:40 +08:00
 click
被 Microsoft Authenticator 坑惨了!
最近换机发现 Microsoft Authenticator 没法跨平台备份/恢复,iOS 平台和安卓平台不互通。

需求:
1.支持跨平台备份/恢复。
2.不用翻墙。
3686 次点击
所在节点    问与答
38 条回复
woshicixide
2024-01-12 10:08:19 +08:00
被你这么一说也想换了
lw0717
2024-01-12 10:09:31 +08:00
我也被 Microsoft Authenticator 坑过,换了 Google 的
nothingistrue
2024-01-12 10:16:29 +08:00
Microsoft Authenticator Q&A 第一个就是,不能在 Android 和 iOS 之间切换。事实上你刚开始看到 iOS 备份需要 icloud ,Android 备份不需要,就该猜到两个平台之间的备份是独立的。Microsoft Authenticator 的 2FA 只是附加功能,它的主功能是 Microsoft Account 的免密登录器,这是物理密钥,它的「备份/恢复」不是复制粘贴,而是密钥迁移,这要想跨平台就太为难了。

TOTP 2FA ,虽然技术上不是物理密钥(它的密钥可以随意复制),但你最好还是别搞什么跨平台同步。想要跨平台同步就没法用平台私有的文件系统加密防护,同步服务商只能在自己的服务端用主密码来保护密钥(不负责人的甚至会明文存储密钥),一旦服务商发生泄漏你就乐开花了——重置 2FA 可比重置密码的操作繁琐多了。

最好还是各用各的,这样除了安全性高之外,还天然给你的众多 2FA 多了一套备份。 Microsoft Authenticator 是使用相同的主帐号来在多个设备中断上各用各的的。
weidaizi
2024-01-12 10:30:03 +08:00
https://github.com/MuggleWei/yoauth

我用自己写的,一个本地的,纯命令行终端下的 TOTP generator ;支持 linux/windows/mac/android ,要备份直接复制本地数据文件就 ok 了
ztxcccc
2024-01-12 10:31:57 +08:00
歪一下楼,之前谷歌那个更新了以后很多人反馈同步有问题,现在解决了吗?我还在用很旧的版本
mikaelson
2024-01-12 10:40:25 +08:00
我倒是想问有没有能自动填充的?
虽然用的浏览器插件,但是每次都要点一下。。。。

还有就是,比如 jumpserver 这一类的跳板机,有办法在用本地 ssh 客户端的时候也能自动填充吗。。。太麻烦了
mhqschen
2024-01-12 10:44:54 +08:00
@woshicixide #19 那么多血淋淋的案例,怎么还敢用
click
2024-01-12 10:46:27 +08:00
@gletec
@arfaWong
@qistchan
@youngkingdom
感谢回复。bitwarden 的 TOTP 是要付费的吧
click
2024-01-12 10:48:29 +08:00
@ab
@vacuitym
@zjcoding
感谢回复。Google 要翻墙。虽然说我可以翻,但也不是一直挂着
arfaWong
2024-01-12 11:07:01 +08:00
@click #28 自建的就是免费用的
MuSeCanYang
2024-01-12 11:20:04 +08:00
2 FAS
zjcoding
2024-01-12 11:49:48 +08:00
@click #29 不用啊,只是下载的时候需要,用的时候不需要联网的
qistchan
2024-01-12 13:47:50 +08:00
@click 自建的免费
NoOneNoBody
2024-01-12 13:54:43 +08:00
import pyotp
totp = pyotp.TOTP(...)
print(totp.now())
CodeCodeStudy
2024-01-12 14:42:55 +08:00
php 的代码,不依赖第三方库

```php
<?php

class TOTP {
private static $base32Map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';

private static function base32Decode($in) {
$l = strlen($in);
$n = $bs = 0;

for ($i = 0; $i < $l; $i++) {
$n <<= 5;
$n += stripos(self::$base32Map, $in[$i]);
$bs = ($bs + 5) % 8;
@$out .= $bs < 5 ? chr(($n & (255 << $bs)) >> $bs) : null;
}

return $out;
}
public static function getOTP($secret, $digits = 6, $period = 30, $offset = 0) {
if (strlen($secret) < 16 || strlen($secret) % 8 != 0)
return ['err' => 'length of secret must be a multiple of 8, and at least 16 characters'];
if (preg_match('/[^a-z2-7]/i', $secret) === 1)
return ['err' => 'secret contains non-base32 characters'];
$digits = intval($digits);
if ($digits < 6 || $digits > 8)
return ['err' => 'digits must be 6, 7 or 8'];

$seed = self::base32Decode($secret);
$time = str_pad(pack('N', intval($offset + time() / $period)), 8, "\x00", STR_PAD_LEFT);
$hash = hash_hmac('sha1', $time, $seed, false);
$otp = (hexdec(substr($hash, hexdec($hash[39]) * 2, 8)) & 0x7fffffff) % pow(10, $digits);

return ['otp' => sprintf("%'0{$digits}u", $otp)];
}
}

echo TOTP::getOTP('xxx')['otp'];
```
LCD
2024-01-12 20:43:33 +08:00
试一下,freeotp
sayoll
2024-01-15 13:21:50 +08:00
click
2024-01-27 00:08:42 +08:00
感谢大家的回复,最后我还是用回了 MS Authenticator 。因为微软账户好像只支持 MS Authenticator

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1007969

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX