Pythonで2段階認証のワンタイムパスワードの取得

pythonプログラムの中で、二段階認証コードを取得する必要がありましたので、その備忘録を。

概要

OS:MacOSX Mojave

開発環境:Spyder(python3.6)

pythonプログラムで、bashコマンドを呼び出し、oath-toolを実行して、出力されるワンタイムパスワードを文字列としてpythonで取得します。

Oath tool のインストール

 brew install oath-toolkit

Sierraのときにインストールしたbrewで、上記コマンドのインストールを試したのですが、シンボリックリンクが作成できない、というエラーが出て、oath-toolのインストールができませんでした。

いろいろ試行錯誤しましたが、できなかったので、brewを再インストールしました。

再インストールは以下の記事を参考にさせていただきました。

Homebrewがおかしくなったら再インストールしよう - Qiita
## はじめに YosemiteのときにHomebrewをインストールしたのですが、El Capitanで追加されたRootlessによってパーミッション周りがおかしくなり、Homebrewが使えなくなりました。 High Sierr...

pythonプログラム

import subprocess
 
cmd = ['oathtool', '--totp', '--base32', '2段階のシークレットキー']
 
out = subprocess.run(cmd, stdout=subprocess.PIPE)
fa_string = out.stdout.decode()
string_2fa = fa_string[:6]#取得する文字列の最後に改行があるため、6文字で切る処理
print(string_2fa)

つまずいた点

①bashターミナルで実行する

最初は、spyderのi python consoleで実行していたのですが、oathtoolが見つかりませんとなり、実行できませんでした。環境変数周りなどの設定が必要なのかもしれませんが、python開発環境にあまり詳しくないので、とりあえず実行できるbashのターミナルで検証を行いました。

②oathtoolの返すパスワード文字列(string_2faのところ)

上記プログラムを二段階認証をパスさせるためにプログラムに組み込もうとしていたのですが、ひたすらはじかれました^^;どうやら、文字列の最後に改行?(正確に文字コードは調べてないですが)が入っていたので、6文字目までをパスワードとして取得することで、正常なワンタイムパスワードとして取得できました。

参考にしたサイト

subprocess関連

【python】os.systemはもう古い!?subprocessでコマンドを実行しよう! | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
os.system()はもう使わない!subprocess()の使い方!今回は、pythonでunixコマンドを使う方法を紹介します。 今までの手段では、os.systemを用いてコマンドを実行しておりましたが、現在ではos.systemをはじめとした、いくつかのモジュールを統合したsubprocessが出てきておりま...
タイトルとURLをコピーしました