有没有靠谱的 2FA 验证器推荐? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
click
V2EX    问与答

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

  •  
  •   click 2024-01-12 01:40:40 +08:00 4481 次点击
    这是一个创建于 638 天前的主题,其中的信息可能已经有所发展或是发生改变。
    被 Microsoft Authenticator 坑惨了!
    最近换机发现 Microsoft Authenticator 没法跨平台备份/恢复,iOS 平台和安卓平台不互通。

    需求:
    1.支持跨平台备份/恢复。
    2.不用翻墙。
    38 条回复    2024-01-27 00:08:42 +08:00
    TossPig
        1
    TossPig  
       2024-01-12 02:30:38 +08:00   2
    Vaultwarden
    TaurusXin
        2
    TaurusXin  
       2024-01-12 03:29:52 +08:00 via iPhone   1
    https://2fas.com/

    全平台,还支持浏览器插件
    BigShot404
        3
    BigShot404  
       2024-01-12 03:46:01 +08:00
    我用 Authy

    https://authy.com/
    Dragonish3600
        4
    Dragonish3600  
       2024-01-12 04:52:16 +08:00 via iPhone
    Authy
    ab
        5
    ab  
       2024-01-12 05:32:58 +08:00
    google authenticator + 苹果密码
    前者扫完再用 ios 相机也扫一次。
    后者既可当做备份也可以方便 safari 使用。
    bobryjosin
        6
    bobryjosin  
       2024-01-12 07:05:21 +08:00 via Android
    yubico authenticator 需要你有一个 yubikey ,全平台都有客户端,离线不联网,代价是出门需要额外带一个硬件,丢失损坏不能恢复存储的 2fa ,我一般是两个 yubikey+authy 都存一份。
    SenLief
        7
    SenLief  
       2024-01-12 07:27:42 +08:00   1
    密码管理器不是都带 totp
    arfaWong
        8
    arfaWong  
       2024-01-12 08:04:16 +08:00
    自建 bitwarden
    gletec
        9
    gletec  
       2024-01-12 08:05:31 +08:00 via Android
    密码管理器自带 totp 记录。而且很多是支持自动填入的,都不需要你自己手动输入。
    netnr
        10
    netnr  
       2024-01-12 08:24:21 +08:00 via Android
    在用 Aegis ,而且可以导出
    uuhhme
        11
    uuhhme  
       2024-01-12 08:24:37 +08:00 via Android
    ente 跨平台,支持导出二维码,现在用的挺好。同时 iCloud 钥匙串备份一份,无忧
    qistchan
        12
    qistchan  
       2024-01-12 08:43:58 +08:00
    自建 bitwarden+1 ,自带 TOTP
    surbeta
        13
    surbeta  
       2024-01-12 08:48:56 +08:00
    Authy,用了很多年了
    n2l
        14
    n2l  
       2024-01-12 09:19:46 +08:00
    Authy PC 版好像得挂代理才能上去。
    lisxour
        15
    lisxour  
       2024-01-12 09:41:31 +08:00
    可以手动导出,t/979314
    vacuitym
        16
    vacuitym  
       2024-01-12 09:54:57 +08:00
    用的 Google 的
    zjcoding
        17
    zjcoding  
       2024-01-12 10:04:24 +08:00
    google ,可以导入导出
    youngkingdom
        18
    youngkingdom  
       2024-01-12 10:05:49 +08:00
    自建 bitwarden+1
    woshicixide
        19
    woshicixide  
       2024-01-12 10:06:48 +08:00
    用的微软的 authenticator
    c0mmand
        20
    c0mmand  
       2024-01-12 10:07:04 +08:00
    Authy
    woshicixide
        21
    woshicixide  
       2024-01-12 10:08:19 +08:00
    被你这么一说也想换了
    lw0717
        22
    lw0717  
       2024-01-12 10:09:31 +08:00
    我也被 Microsoft Authenticator 坑过,换了 Google 的
    nothingistrue
        23
    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
        24
    weidaizi  
       2024-01-12 10:30:03 +08:00
    https://github.com/MuggleWei/yoauth

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

    还有就是,比如 jumpserver 这一类的跳板机,有办法在用本地 ssh 客户端的时候也能自动填充吗。。。太麻烦了
    mhqschen
        27
    mhqschen  
       2024-01-12 10:44:54 +08:00
    @woshicixide #19 那么多血淋淋的案例,怎么还敢用
    click
        28
    click  
    OP
       2024-01-12 10:46:27 +08:00
    @gletec
    @arfaWong
    @qistchan
    @youngkingdom
    感谢回复。bitwarden 的 TOTP 是要付费的吧
    click
        29
    click  
    OP
       2024-01-12 10:48:29 +08:00
    @ab
    @vacuitym
    @zjcoding
    感谢回复。Google 要翻墙。虽然说我可以翻,但也不是一直挂着
    arfaWong
        30
    arfaWong  
       2024-01-12 11:07:01 +08:00
    @click #28 自建的就是免费用的
    MuSeCanYang
        31
    MuSeCanYang  
       2024-01-12 11:20:04 +08:00
    2 FAS
    zjcoding
        32
    zjcoding  
       2024-01-12 11:49:48 +08:00
    @click #29 不用啊,只是下载的时候需要,用的时候不需要联网的
    qistchan
        33
    qistchan  
       2024-01-12 13:47:50 +08:00
    @click 自建的免费
    NoOneNoBody
        34
    NoOneNoBody  
       2024-01-12 13:54:43 +08:00
    import pyotp
    totp = pyotp.TOTP(...)
    print(totp.now())
    CodeCodeStudy
        35
    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
        36
    LCD  
       2024-01-12 20:43:33 +08:00 via Android
    试一下,freeotp
    sayoll
        37
    sayoll  
       2024-01-15 13:21:50 +08:00
    click
        38
    click  
    OP
       2024-01-27 00:08:42 +08:00
    感谢大家的回复,最后我还是用回了 MS Authenticator 。因为微软账户好像只支持 MS Authenticator
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2647 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:05 PVG 22:05 LAX 07:05 JFK 10:05
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86