Home 快速導入2FA驗證:使用Google Authentication
Post
Cancel

快速導入2FA驗證:使用Google Authentication

Google Authentication 介紹

現在越來越多服務使用2FA驗證,無論是Microsoft或是Google,都有提供產生一次性OTP服務。 這個範例是使用Google Authentication 實作,重點是完全免費。 過去實做這項功能通常會使用簡訊或是email寄驗證碼,但現在可以不用花錢,導入也很簡單。 目前有提供兩種演算法,並產生一次限時的代碼,預設時間為30秒:

  1. Time-based One-Time Password (TOTP):藉由目前的時間以及secret進行Hash產出OTP
  2. HMAC-Based One-time Password (HOTP):根據計數器以及secret進行Hash產出OTP

使用Python實作2FA

  1. 首先,須先下載相關套件
    1
    
     pip install pyotp qrcode
    
  2. 建立一個名app 的Python 檔案:app.py ,寫入下列程式碼
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
       import pyotp
       import qrcode
    
       #產生一組secret,可自行產生不同的secret
       totp = pyotp.TOTP('base32secret3232')
    
       #產生uri
       uri=pyotp.totp.TOTP('base32secret3232').provisioning_uri('user@example.com', issuer_name='yutingwu')
    
       #產生QR Code 圖檔
    
       qrcode.make(uri).save("qr.png")
    
       # 驗證代碼是否正確
       while True:
          print(totp.verify(input(("Enter the Code : "))))
          break
    
    
  3. 下載Google Authenticator App
  4. 接下來,執行 app.py ,會產生QR Code 圖檔
  5. 使用App掃描QR Code 圖檔加入後,可以看到User@example.com以及簽署的資訊
  6. 於Terminal 輸入產生的OTP代碼,執行結果如下

流程圖

sequenceDiagram 用戶端->>伺服器 :1.呼叫登入API 伺服器->>用戶端 :2.驗證帳號密碼,若失敗導入登入頁 伺服器->> 伺服器 :3.驗證成功,進行2FA驗證,產生secret 伺服器->> 用戶端 :4.透過uri傳送secret,前端顯示QRCode 用戶端->>Google Authenticator :5.第一次需掃描QRCode註冊服務 Google Authenticator-> 用戶端 : 6.產生OTP Code 用戶端->>伺服器 :7.輸入OTP Code,驗證是否正確 伺服器->>用戶端 :8.回傳驗證成功或失敗

Reference

Two-Factor Authentication using Google Authenticator in Python

Python One-Time Password 的好朋友 - pyotp

This post is licensed under CC BY 4.0 by the author.