V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
lancegin
V2EX  ›  分享创造

[开源] 便携的二步验证小程序 及 基于 RFC4226 和 RFC6238 的一次性密码生成及验证 node 模块

  •  1
     
  •   lancegin ·
    lancegin · 2017-06-30 21:22:50 +08:00 · 4169 次点击
    这是一个创建于 2705 天前的主题,其中的信息可能已经有所发展或是发生改变。

    MinaOTP

    MinaOTP 是一款用来生成二步验证 token 的小程序,基于 RFC6238 实现,TOTP 算法由javascript实现。

    小程序会安全地实时计算动态二步验证 token,token 的增加编辑删除也很方便。

    小程序码

    qrcode

    截图

    screenshot

    功能

    • 计算二步验证 token
    • 扫码添加新的 token
    • 手动输入 token 添加
    • 编辑服务和帐号备注信息
    • 删除已存在的 token

    计划

    1. 备份数据至用户自定义数据库
    2. 优化进度条

    开源

    小程序代码已在 Github 上开源。

    MinaOTP 传送门 ->


    jsotp

    jsotp是一个用来生成用来生成及验证一次性密码的 js 模块,一次性密码通常用来在 web 应用或者其他登录系统中作为二步验证或多步验证使用。

    该模块基于 RFC4226 ( HOTP:基于计数器的一次性密码算法)和 RFC6238( TOTP:基于时间的一次性密码算法)实现

    示例

    功能

    • 随机生成 base32 加密的字符串
    • 创建可验证的 HOTP 对象
    • 验证 HOTP 密码
    • 创建可验证的 TOTP 对象
    • 验证 TOTP 密码

    安装

    npm install jsotp
    

    模块

    全部模块支持:

    let jsotp = require('jsotp');
    

    使用

    基于时间的 OTP

    // import
    let jsotp = require('jsotp');
    
    // Create TOTP object
    let totp = jsotp.TOTP('BASE32ENCODEDSECRET');
    totp.now(); // => 432143
    
    // Verify for current time
    totp.verify(432143); // => true
    
    // Verify after 30s
    totp.verify(432143); // => false
    

    基于计数器的 OTP

    // import
    let jsotp = require('jsotp');
    
    // Create HOTP object
    let hotp = jsotp.HOTP('BASE32ENCODEDSECRET');
    hotp.at(0); // => 432143
    hotp.at(1); // => 231434
    hotp.at(2132); // => 242432
    
    // Verify with a counter
    hotp.verify(242432, 2132); // => true
    hotp.verify(242432, 2133); // => false
    

    生成随机 base32 加密字符串

    // import
    let jsotp = require('jsotp');
    
    // Generate
    let b32_secret = jsotp.Base32.random_gen();
    

    开源

    jsotp 传送门 ->

    传送门整合

    MinaOTP 传送门 ->

    jsotp 传送门 ->

    12 条回复    2017-07-01 22:58:03 +08:00
    sobigfish
        1
    sobigfish  
       2017-06-30 22:51:26 +08:00
    👍,拿来自用 TOTP 不够安全,但可以融入企业网站应用什么的 2FA 用,那些普通用户估计也不会去下 Google Authenticator
    lancegin
        2
    lancegin  
    OP
       2017-06-30 23:02:35 +08:00 via iPhone
    @sobigfish 嗯, 结合下面的 jsotp module,从生成 token,到 2FA 的验证全流程都跑通了 ,,话说自用 TOTP 的不够安全是指哪方面呢
    sobigfish
        3
    sobigfish  
       2017-06-30 23:12:27 +08:00
    @lancegin #2 key(token) 现在是存在 wx.setStorage 里的?
    虽然文档里写的是“ localStorage 是永久存储的” 但感觉对比独立的 app 而言容易掉
    lancegin
        4
    lancegin  
    OP
       2017-06-30 23:18:51 +08:00 via iPhone
    @sobigfish 确实,这就得看微信小程序具体设计了,,不过我在 todo 里写有一个自定义数据存储,就是为了解决这个问题,同时增加与用户同步的功能,这对于我个人是很有需求的🌝
    sobigfish
        5
    sobigfish  
       2017-06-30 23:21:56 +08:00
    用户同步就涉及到 key 的第三存储了
    所以,我要备份的话首选系统级的同步备份比如 iCloud 了
    lancegin
        6
    lancegin  
    OP
       2017-06-30 23:33:20 +08:00 via iPhone
    @sobigfish 自定义第三存储,各人首选都不同
    BOYPT
        7
    BOYPT  
       2017-06-30 23:52:34 +08:00
    @sobigfish #3 话说这个永久存储,换一台手机登陆微信是否会同步?
    wxsolo
        8
    wxsolo  
       2017-06-30 23:55:19 +08:00
    这个对有需要,但使用频率不高的人实在太方便了
    lancegin
        9
    lancegin  
    OP
       2017-07-01 06:11:39 +08:00 via iPhone
    @BOYPT 本地存储是不会同步的,准备加上的自定义三方存储就能达到这个目的了
    chroming
        10
    chroming  
       2017-07-01 14:09:17 +08:00 via iPhone
    之前想用 Pythonista 写个,写好 demo 就懒得写了……
    lancegin
        11
    lancegin  
    OP
       2017-07-01 16:15:33 +08:00 via iPhone
    @chroming pythonista 可以在移动端调用本地 py 模块吗
    chroming
        12
    chroming  
       2017-07-01 22:58:03 +08:00
    @lancegin 你的本地是指 pc? 没研究过
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1059 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:59 · PVG 03:59 · LAX 11:59 · JFK 14:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.