Edited at
ゆめみDay 23

MFA Token を Alfred Workflow で簡単生成する(暗号化あり)

以前から CLI で Authy と共通の MFA Token を生成する でトークンを生成してたんですが、トークンが欲しい時は大抵 Web サービスを利用しているときや awscli で Enter MFA Code: と聞かれたときであり、いちいち CLI で生成するのが面倒です。

Mac でおなじみの高機能ランチャー Alfred の Workflow(有料オプション)を使えば柔軟な機能定義ができるので、Alfred Workflow で MFA Token を簡単に生成できるようにしました。半年以上自分の環境で運用していたのですが、こなれてきたので晒します。


類似の workflow が既にあったのですが、シークレットキーを平文で管理したくなかったので、CLI で Authy と共通の MFA Token を生成する で行った手法と同じ方法で暗号化しています。


生成したトークンはクリップボードにコピーされるのと同時に、直前のウィンドウに自動的にペーストされるので、awscli のように Terminal でトークンを求められる場合でも快適に使えます。

https://github.com/u-minor/alfred-mfa-workflow


機能



  • mfa SERVICE と入力することで、登録したサービスがインクリメンタルサーチされます。


    • 実際にはサービス一覧を grep しているので、部分マッチします。



  • 生成したトークンは、クリップボードに入るのと同時に直前のウィンドウのカーソル位置に自動ペーストされます。

  • 各サービスのトークン生成に必要なシークレットキーは、OpenSSL の RSA キーで暗号化して保持しています。


    • ですので、トークン生成のたびにパスフレーズの入力が必要になります。



  • データ+暗号化キーの初期化、サービスの追加・削除も Alfred 経由で可能です。


事前準備

利用するには、oath-toolkit のインストールが必要です。

oathtool というコマンドで HTOP/TOTP Token が生成可能になります。

Homebrew でさくっとインストールしましょう。

brew install oath-toolkit

Terminal で oathtool と入力し、ヘルプが表示されればインストール OK です。


workflow のインストール

以下のページから workflow を取得してインストールしてください。

https://github.com/u-minor/alfred-mfa-workflow/releases


使い方

初回は RSA キーの初期化が必要です。

Alfred のウィンドウで mfa init と入力し、初期化処理を行ってください。

キーを作成する際のパスフレーズを聞かれますので、お好きなものを入力してください。

この後登録する各サービスのシークレットキーを暗号化するためのものです。


サービスの追加

Alfred のウィンドウで mfa add サービス名 シークレットキー と入力することで、新規のサービスを追加できます。


シークレットキーは基本的には MFA 登録時の QR コードが表示されたタイミングでしか取得できませんが、Authy を使っている方は、後から無理矢理シークレットキーを抜き出すことが出来ます。

CLI で Authy と共通の MFA Token を生成する を参考にしてください。



トークンの生成

Alfred のウィンドウで mfa サービス名 でインクリメンタルサーチができます。

サービス名の一部でもマッチします。

直近で利用したサービスが上位に来るようにリストを自動調整しています。


サービスの削除

Alfred のウィンドウで mfa rm サービス名 と入力することで、既存のサービスを削除できます。


おまけ

生成されるリストや暗号化の手法は CLI で Authy と共通の MFA Token を生成する と同じなので、記事中の mfacodegen コマンドで workflow で管理しているファイルをそのまま利用できます。


参照するデータのパスを変える必要はありますが。