ApacheでGoogleワンタイムパスワード認証
とあるサイトを外部へ見せるんだけど、ただの基本認証だと怖いのでワンタイムパスワードを使ってみる。
ググッてやってみるとめずらしくちゃっちゃと出来たのでメモ。
mod-auth-otpをインストールする
apacheのワンタイムパスワードモジュールをインストール。ブツはgithubのここにあるのでcloneするなりダウンロードするなりで入手。
autogenしてconfigure,make。自分の環境ではapcheをソースから作成しているのでapxsは環境変数で指定します。
$ cd mod-authn-otp $ ./autogen.sh $ export APXS=/usr/local/apache2/bin/apxs $ ./configure $ make # make install
apacheの設定ファイルに認証についての設定をいれる
こんなかんじです。
<Location /otptest> AuthType Basic AuthName "OTP Authentication" AuthBasicProvider OTP Require valid-user OTPAuthUsersFile /var/www/otp/users OTPAuthMaxLinger 3600 OTPAuthMaxOTPFailure 20 OTPAuthPINAuthProvider file OTPAuthLogoutOnIPChange On </Location>
OTPAuthUserFileを準備する
上記では /var/www/otp/users と指定しています。read permission は厳し目にしたほうがいいかも。
書式はこんな感じです。
HOTP/T30 user_name - XXXXXXXXXXXXXXXXXXXXXXX
一カラム目がワンタイムで、三十秒有効。二カラム目がユーザ名です。あとはよくわからない(ww
でもありがたいことにユーザファイルまで作成してくれて、GoogleのQRコード作成URIを出してくれるシェルを作ってくれて公開してくださる方がいるのでありがたくそれを利用。
http://qiita.com/kz-takahashi/items/af8ea7d9894f26a65068
ここからシェルをコピーして、ユーザファイルの出力先とか適当に変更。これを適当に otp.sh などと保存して
$ otp.sh hogehoge
と実行すると /var/www/otp/users にエントリを追加して、GoogleのQRコードを表示するURIを標準出力に出してくれます。このURIで表示されたQRコードをこのあとでインストールするGoogle Authenticatorで読み込む。
Google Authenticator をインストール
iosかAndroidが必要。これをインストールして、上記のQRコードを読み込むとワンタイムパスワードが発行されるので、ユーザ名とパスワードを入力すると認証が通ります。