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
でもありがたいことにユーザファイルまで作成してくれて、GoogleQRコード作成URIを出してくれるシェルを作ってくれて公開してくださる方がいるのでありがたくそれを利用。
http://qiita.com/kz-takahashi/items/af8ea7d9894f26a65068

ここからシェルをコピーして、ユーザファイルの出力先とか適当に変更。これを適当に otp.sh などと保存して

$ otp.sh hogehoge

と実行すると /var/www/otp/users にエントリを追加して、GoogleQRコードを表示するURIを標準出力に出してくれます。このURIで表示されたQRコードをこのあとでインストールするGoogle Authenticatorで読み込む。

Google Authenticator をインストール

iosAndroidが必要。これをインストールして、上記のQRコードを読み込むとワンタイムパスワードが発行されるので、ユーザ名とパスワードを入力すると認証が通ります。