2020/10/13

[Python][TOTP]Pythonで2段階認証を実装する

python

概要

TOTP(Time-Based One Time Password)ベースの2段階認証をサイトに追加することがあったので
調査して実装しました。

‎Google Authenticatorとか‎Authyとかで利用できるよくあるやつです。

pyotpという便利なライブラリがあったので、そちらを利用しています。

実装方法

install

poetry add pyotp

python code

ユーザーに表示させたい時

import pyotp

otp_secret = pyotp.random_base32()
otp_url = pyotp.totp.TOTP(otp_secret).provisioning_uri(name=user.email, issuer_name=settings.APP_NAME)
  • otp_secret がsecretです。これはユーザーが設定する毎に生成して、DBに保存して利用します。
  • otp_url QRcodeなどでアプリに読ませる情報です
    • otpauth://totp/your-app-name:user-email%40gmail.com?secret=BASE32STRING&issuer=your-app-name みたいなURL文字列です

認証したい時

import pyotp

code = '140786'  # http requestで飛んでくるuserが入力した認証コード

totp = pyotp.TOTP(otp_secret)  # このユーザーに設定したotp_secretを利用
totp.verify(code)  # 認証OKならTrue / 失敗したらFalse

以上になります。