pythonプログラムの中で、二段階認証コードを取得する必要がありましたので、その備忘録を。
目次
概要
OS:MacOSX Mojave
開発環境:Spyder(python3.6)
pythonプログラムで、bashコマンドを呼び出し、oath-toolを実行して、出力されるワンタイムパスワードを文字列としてpythonで取得します。
Oath tool のインストール
brew install oath-toolkit
Sierraのときにインストールしたbrewで、上記コマンドのインストールを試したのですが、シンボリックリンクが作成できない、というエラーが出て、oath-toolのインストールができませんでした。
いろいろ試行錯誤しましたが、できなかったので、brewを再インストールしました。
再インストールは以下の記事を参考にさせていただきました。
https://qiita.com/uhooi/items/91d2261ab30b6f2c143a
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関連