2020/10/13
[Python][TOTP]Pythonで2段階認証を実装する
概要
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
以上になります。
関連する記事
[Python]ハイフンなし電話番号からハイフン付きに復元
Pythonでハイフンなしの日本の電話番号をハイフン付きのものに変換する
[Python]BeautifulSoup4でhtmlの解析
BeautifulSoup4というPythonのライブラリを使って、特定のURLのコンテンツを取得し、タイトルや説明文を取得できるようにしました。
[Python]銀行コードと支店コードの取扱
Pythonで銀行コード、支店コードデータを取り扱う便利なライブラリzengin-codeを導入しました。
Sendgridを使ってメールの受信を行う
Inbound Email Parse Webhookという機能を利用してメールを受信したらWebhookを呼び出すようにしました