フォームを使ったBasic認証

ログイン画面を使ったBasic認証です。

仕組み

通常のWebページID&Passによるログイン画面を設けることができます。Webページに認証がないと①に飛ばされログイン画面表示されます。
① login.html(UserID&Password入力画面)
② dologin.html(Apache内で認証作業)
③ htmlで書かれたWebページ群(認証がない場合は①へ移る)
④ dologout.html(Apache内で認証解除作業)
⑤ logout.html(終了画面)

ID登録

htpasswdコマンドでパスワードファイルをを作成します。
-c 最初にパスワードファイルを作るときに指定します。
-b コマンドラインでパスワードも指定する。

htpasswd -c -b ~/public_html/.htpasswd User1 Password1
htpasswd -b ~/public_html/.htpasswd User2 Password2

~/public_html/.htaccessの設定

<Files "dologin.html">
SetHandler form-login-handler
AuthFormLoginSuccessLocation /~user/ok.html
SessionMaxAge 600
</Files>
<Files "dologout.html">
SetHandler form-logout-handler
AuthFormLogoutLocation "/~user/logout.html"
SessionMaxAge 1
</Files>
<FilesMatch "^(?!login.html).*">
require valid-user
</FilesMatch>
AuthFormProvider file
AuthFormLoginRequiredLocation /~user/login.html
AuthUserFile "/home/user/public_html/.htpasswd"
AuthType form
AuthName "realm"
Session On
SessionCookieName session path=/~user/
SessionCryptoPassphrase hogehoge

Apache内でmod_sessionが指定されていない場合があるので/etc/httpd/conf.modules.d/01-session.confを確かめる。

login.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン</title>
</head>
<body>
<form method="POST" action="dologin.html">
 Username: <input type="text" name="httpd_username" value="" /><br />
 Password: <input type="password" name="httpd_password" value="" />
 <button type="submit" name="login" value="Login">Login</button>
</form>
</body>

logout.html

<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログアウト</title>
</head>
<body>
<p>
 ログアウトしました。
 <br>
 <a href="login.html">ログイン</a>
</p>
</body>
</html>

dologin.htmlおよびdologout.html

この2つは認証のためのダミーになりますので作らなくてよい。

この記事が気に入ったらサポートをしてみませんか?