トップページ | 利用規定
  フォーム認証

カレッヂ
カレッヂ



概要

- Webサーバの機能であるベーシック認証でアクセス制限した場合、ログアウトするにはブラウザを閉じるしかありません。 そもそもベーシック認証にはログアウトという概念がありません。

- 昨今、スマートフォンなどが普及され、ブラウザを閉じてもベーシック認証が解除できないことに不具合が生じる場合があります。 そこで、ベーシック認証の環境を出来るだけ継続し、フォーム認証に変更する方法について説明します。

- フォーム認証とは、HTMLのフォームを利用してユーザ名・パスワード等により認証を行う方法です。


構成

- 例として、下記のようなベーシック認証の設定になっているものとします。

 /public_html/
   |
   ├ .htaccess <パスワードファイルを見せないアクセス制限設定>
   |      ─────────────────────────
   |      <Files .htaccess>
   |      deny from all
   |      <Files>
   |
   ├ .htpasswd <パスワードファイル>
   |      ─────────────────────────────
   |      user1:N0EVRIdQQGyWE
   |      user2:8r/qV7jYRQCUs
   |      … というようなファイルです。
   |
   ├ /homepage/ <アクセス制限されたディレクトリ>
   |   |   ────────────────────────────
   |   |   user1:11111111
   |   |   user2:22222222
   |   |   … に設定しています。(※1)
   |   |
   |   ├ .htaccess <アクセス制限設定>
   |          ─────────────────────────
   |          AuthUserFile     /home/user/public_html/.htpasswd
   |          AuthGroupFile    /dev/null
   |          AuthName         ByPassword
   |          AuthType         Basic
   |          <limit POST GET>
   |          require valid-user
   |          </limit>
   |          … というようなファイルです。
- これを、次のように変更します。変更途中にアクセスされてしまわないよう、".htaccess"ファイルの変更は最後にすべきです。

 /public_html/
   |
   ├ .htaccess <パスワードファイルを見せないアクセス制限設定>
   |      ─────────────────────────
   |      <Files .htaccess>
   |      deny from all
   |      <Files>
   |      DirectoryIndex index.cgi (※2)
   |
   ├ .htpasswd <パスワードファイル>
   |      ─────────────────────────────
   |      user1:N0EVRIdQQGyWE
   |      user2:8r/qV7jYRQCUs
   |      … 認証用のデータとしてそのまま使います。
   |
   ├ /homepage/ <アクセス制限するディレクトリ>
   |   |   ────────────────────────────
   |   |   フォーム認証CGI"auth.cgi"が参照元になっている場合に限りアクセスできる。
   |   |   直接アクセスまたは参照元が異なる場合は、403エラーを返します。
   |   |
   |   ├ .htaccess <アクセス制限設定>
   |   |      ─────────────────────────
   |   |      SetEnvIf Referer "^http://www\.rescue\.ne\.jp/cgi/formAuthentication/sample/auth\.cgi" ref_ok
   |   |      order deny,allow
   |   |      deny from all
   |   |      allow from env=ref_ok
   |   |
   |   ├ index.cgi <リンクするページ>
   |          ─────────────────────────
   |          (※2)通常のHTMLページでもいいですが、フォーム認証ページのキャッシュが残っていると
   |          ログアウトした後でも参照元が参照されてアクセス出来てしまうので、できれば
   |          このサンプルのようにセッションを確認するCGIを組み込んだ方がいいと思います。
   |
   ├ auth.cgi <フォーム認証CGI>

- 動作デモは、上記 "auth.cgi" をクリックしてください。ユーザ名とパスワードも上記(※1)の通りです。


仕組み

- パスワードファイルのユーザ名と暗号化されたパスワードを元に、フォームから送信されたそれらと照合を行い、合っていればセッションIDを発行します。

- セッションIDはそれを名前とするサーバ上のセッションファイルに記録され、そこにはユーザ名とアクセス情報も記録されます。

- 同時に、セッションIDはクッキーに記録されます。

- セッションファイルとセッションクッキーが一致すれば、セッション中であることとします。

- クッキーに記録されるセッションIDは意味不明な英数字文字列の羅列であり、ユーザ名・パスワードは含まれません。

- セッションファイルとセッションクッキーには期限があり、一定の期限を過ぎると消去されます。


ダウンロード

- フォーム認証CGIは、上記デモファイルも含まれています。
- フォーム認証CGIサンプルセットのダウンロード (formAuth_1_01.zip)

- このシステムはフリーソフトですが、利用規定に従ってご利用ください。



参考


Powered by CGI RESCUE(R)