<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## 概述 雙因素認證(Two-factor authentication,簡稱 2FA) ### 雙因素認證的概念 - 秘密信息:只有該用戶知道、其他人不知道的某種信息,比如密碼 - 個人物品:該用戶的私人物品,比如身份證、鑰匙 - 生理特征:該用戶的遺傳特征,比如指紋、相貌、虹膜等等 ### 雙因素認證方案 - 常用的雙因素組合是密碼 + 某種個人物品 - 密碼 + 手機就成了最佳的雙因素認證方案 - 安全的雙因素認證不是密碼 + 短消息,而是TOTP ### TOTP 的概念 - TOTP 的全稱是"基于時間的一次性密碼"(Time-based One-time Password) - 它是公認的可靠解決方案,已經寫入國際標準 <br/> 步驟: 1. 第一步,用戶開啟雙因素認證后,服務器生成一個密鑰 2. 第二步:服務器提示用戶掃描二維碼(或者使用其他方式),把密鑰保存到用戶的手機。也就是說,服務器和用戶的手機,現在都有了同一把密鑰 ![](http://www.ruanyifeng.com/blogimg/asset/2017/bg2017110107.png) 注意,密鑰必須跟手機綁定。一旦用戶更換手機,就必須生成全新的密鑰 3. 第三步,用戶登錄時,手機客戶端使用這個密鑰和當前時間戳,生成一個哈希,有效期默認為30秒。用戶在有效期內,把這個哈希提交給服務器 4. 第四步,服務器也使用密鑰和當前時間戳,生成一個哈希,跟用戶提交的哈希比對。只要兩者不一致,就拒絕登錄。 ![](http://www.ruanyifeng.com/blogimg/asset/2017/bg2017110108.jpg) ### TOTP 的算法 該算法可以保證手機客戶端和服務器保證30秒期間都得到同一個哈希 ``` TC = floor(unixtime(now) / 30) // HASH就是約定的哈希函數,默認是 SHA-1 TOTP = HASH(SecretKey, TC) ``` ### TOTP 的實現 ``` npm install --save 2fa ``` ``` // 1. 生成一個32位字符的密鑰 var tfa = require('2fa'); tfa.generateKey(32, function(err, key) { console.log(key); }); // b5jjo0cz87d66mhwa9azplhxiao18zlx // 2. 生成hash var tc = Math.floor(Date.now() / 1000 / 30); var totp = tfa.generateCode(key, tc); console.log(totp); // 683464 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看