この記事ではベーシック認証の導入方法、さらに、一定時間操作がなかった場合に強制ログアウトさせる実装もしていきます。
ベーシック認証とは
Basic認証とはWeb上で利用できる認証システムです。
よく、管理画面等で見かけますね。
簡易的な認証方法ですが手軽に導入できるセキュリティのひとつです。
ポップアップに前もって設定してあるIDとpasswordを入力することで、ログインすることができます。
ベーシック認証導入
まずはベーシック認証の導入からです。
主なフローは以下にファイルの作成 + 設置 となります。
.htpasswd
.htaccess
.htpasswdの設置
.htpasswdを新規に作成しましょう。
ユーザ + パスワード定義ファイルとなります。
フォーマットは以下になります。
ユーザー名 :エンコードされたパスワード
中身はhtpasswdのフォーマットを作成してくれるサイトを利用します。
以下のサイトを利用させていただきました。
上記サイトに設定するユーザ名、パスワードを入力してアウトプットしたものをコピペして.htpasswdを作成します。
# vi /var/www/.htpasswd
userName:tesGeyALKYm3A
内容はとても簡単ですね。
ポイントはhtpasswdファイルの配置場所についてです。
必ずURLアクセスできない箇所に配置しましょう。
例として、今回は以下に設置しました。
/var/www/.htpasswd
.htaccessの設置
アクセス制御したいディレクトリのルートに.htaccessを置きます。
例えばtestフォルダ以下のディレクトリに制限をかけたいとなったときには、testフォルダ直下に.htaccessを置きます。
/var/www/html/test/…/…/…
# vi /var/www/html/test/.htaccess
AuthUserFile /var/www/.htpasswd
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType basic
require valid-user
確認
ベーシック認証の導入としては以上となります。
確認方法としては、実際にURLアクセスしてみましょう。
認証ポップアップが出れば成功です。
さらにhtpasswdで設定したユーザ + パスワードでログインできるかチェックしましょう。
タイムアウト => ログアウトの実装
ベーシック認証では、クライアント側で一度認証に成功したパスワードをブラウザで保持しています。
ユーザが一定時間操作を行わなかった場合に、強制的にログアウトされるような仕組みを実装し、セキュリティの向上を計りましょう。
ログアウトさせる仕組みづくりはApacheのモジュール「mod_auth_timeout」や、.htaccessの記述で実現できます。
今回は.htaccessの記述でやってみました。
.htaccessを編集
設置済の.htaccessを更新しましょう。
# vi /var/www/html/test/.htaccess
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !LOGIN=([^;]+) [NC]
RewriteRule ^.*$ - [E=FORCELOGIN:1]
# ドメインと設定したい有効時間(分)を入れる ※以下は10分無操作で再入力を催促させる
RewriteRule ^.*$ - [CO=LOGIN:1:techtech-note.com:10:/]
<If "%{ENV:FORCELOGIN} = 1">
AuthUserFile /dev/null
</If>
<Else>
# .htpasswdを置いた場所
AuthUserFile /var/www/.htpasswd
</Else>
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType basic
require valid-user
有効時間の設定は以下箇所の調整となります。
RewriteRule ^.*$ – [CO=LOGIN:1:ドメイン:有効時間(分):/]
有効時間を短くしたりしてテストで確認してみてください!
以上でベーシック認証 => タイムアウトの実装は完了となります。
参考
・ベーシック認証の導入について
・タイムアウト
・トラブルシューティング