スキップしてメイン コンテンツに移動

Apache BASIC認証でHTMLフォーム利用

ApacheのBASIC認証といえば、ダイアログが出てきてIDとパワードを入力するものだと思っていました。
Apacheの2.3あたりからmod_auth_formというのがあって、BASIC認証なんだけど入力フォームをHTMLで作れる機能がある、ってことを知りました。

ならばやってみるしかありません。
ちょうど認証を入れているものがあったので試してみました。
最初に見つけたサイトのは.htaccessを使うのだったので、2か所に.htaccessを設定するとかでなんとなく理解できず500エラーに。。

https://www.pressmantech.com/tech/1533
を参考にhttpd.confを設定し、passwdの設定をsqlite3にした以下のようなものになりました。

・・・/auth/ 以下にあるアプリ(PHPで作っています)のURLを直接アクセスすると、302応答で/login.htmlへ遷移して、その後/auth/index.htmlにアクセスするので、「認証後に元のアクセス先URLを表示する」というよくあるアプリ動作にならないのが要調査ポイントです。

理想:/auth/hoge.php?aaa=bbb → 認証画面 → /auth/hoge.php?aaa=bbb
理想:/auth/hoge.php?aaa=ccc → 認証画面 → /auth/hoge.php?aaa=ccc
現実:/auth/hoge.php?aaa=bbb → 認証画面 → /auth/index.html

------------------------------------------------------------
DBDriver sqlite3
DBDParams  "/var/www/auth/auth.db"
Alias /auth /var/www/auth
<Location /auth>
    require valid-user
    AuthFormProvider dbd
    AuthDBDUserPWQuery "SELECT password from users where user = %s "
    AuthType form
    AuthName realm
    AuthFormLoginRequiredLocation http://%{SERVER_NAME}/login.html
    Session On
    SessionCookieName auth_form path=/
    SessionCryptoPassphrase hogefugahogefugahogefugahogefuga
</Location>
<Location /dologin.html>
    SetHandler form-login-handler
    AuthFormLoginRequiredLocation http://%{SERVER_NAME}/login.html
    AuthFormLoginSuccessLocation http://%{SERVER_NAME}/auth/index.html
    AuthFormProvider dbd
    AuthDBDUserPWQuery "SELECT password from users where user = %s "
    AuthType form
    AuthName realm
    Session On
    SessionCookieName auth_form path=/
    SessionCryptoPassphrase hogefugahogefugahogefugahogefuga
</Location>
<Location /dologout.html>
    SetHandler form-logout-handler
    AuthFormLogoutLocation http://%{SERVER_NAME}/logout.html
    Session On
    SessionMaxAge 1
    SessionCookieName auth_form path=/
    SessionCryptoPassphrase hogefugahogefugahogefugahogefuga
</Location>

login.html-------------------
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex, nofollow">
<title>ログイン</title>
</head>
<body class="login">
<form method="POST" action="dologin.html" class="loginform">
<p>ユーザー名:<input type="text" name="httpd_username" value=""></p>
<p>パスワード:<input type="password" name="httpd_password" value=""></p>
<p><button type="submit" name="login" value="Login">ログイン</button></p>
</form>
</body>
</html>
logout.html-------------------
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex, nofollow">
<title>ログアウト</title>
</head>
<body>
<p>ログアウトしました。</p>
<p>[<a href="login.html">ログイン画面に戻る</a>]</p>
</body>
</html>

コメント

このブログの人気の投稿

Windows Server 2016 にOracle11gをインストール

.Net3.5が要るらしい。 orz 一回目のインストールの際に「.Net3.5が必要」ってダイアログが山ほど出てきた。 .Net3.5が必要な場合のエラーダイアログはどうして「ダウンロードしてインストールせよ」なんだろう? 参考にした  http://otndnld.oracle.co.jp/easy/oracle11gr1/windows/pdf/SelfStudy_01_win.pdf だと、LISTNERの追加設定(?)が必要そうに書いてあるけど、やってみたら「すでに作成済み」ってなる。 それを信じて進めてみたらどうにもうまくいかない。。。 OracleDBをGUIで操作しよう、っていうのが間違いのようか気がする (逆にSQLserverをCLIでやるのは狂気の沙汰だと思う)。 一旦、アンインストールすることにして、スタートメニューにある「Universal Installer」 を実行してアンインストールしようとしたら「batファイルを実行せよ」というダイアログが。 ググりかたが悪かったのか、 「アンインストールはUniversal Installerからしかないぜ。その他の方法はどーなっても知らないぜHAHAHA」(意訳) と書いてるOracleさんしか見つからない。 どっちを信じたらとも思ったが、目の前のほうが正しいだろうという考えに従いそのバッチ を実行しました。(Universal Installerさんは何度やっても消そうともしてくれないし) バッチ実行後、しばらく放置したら終わったらしい。 Oracleさんがインストールされていたっぽいディレクトリもだいたい消えていた。 消えたよね?ってことで一度再起動してから、Oracle11gのインストールを再び実行。 エラーは出ずに無事終了。 (.Net3.5がインストール済みだったからかな??)  sqlplus / as sysdba は問題ない。でも、別PC(Linux機)からの接続はNG。  lsnrctl status コマンドの実行結果から、やはりlocalhost以外からの接続はLISTENしてない模様。 listener.oraをちょっと修正して、LISTNERサービスを再起動。  lsnrctl status を再度実行すると、IPアドレスの分も表示されたので、外部からも接続できるだろう

1607と1703の場合

※1607とか1703のころの情報です。それ以後では古いゴミ情報と言っても過言ではないでしょう。 Windows10の日本語補助フォントが入っていないことに気づいた。 MSの説明によると、オンデマンドでインストールされるらしいのだけど、 オフラインの場合はどーすれば?ということであれこれ試してみた。 オンラインの場合 「設定」→「システム」→「アプリと機能」→「オプション機能の管理」→「機能の追加」 とたどって「日本語補助フォント」を追加すればいいのだけど、 オフラインの場合は「機能の追加」のところでインターネット接続できない ためにその後の画面が真っ白のまま。 せめて『インターネットに繋がらないため、追加項目が表示できない』程度の メッセージを出してくれれば、とは思う。。。 同じくオンラインの場合、DISMコマンドでも追加できる。どっちかというと こっちが好み。  Dism /Online /Add-Capability /CapabilityName:Language.Fonts.Jpan~~~und-JPAN~0.0.1.0  (参考: https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2015/11/24/windows-10-12-2/ ) だが、オフラインの場合はうまくいかない。/Sourceで指定すべきcabファイルがないからである。 あれこれと検索しているうちに海外サイトで 「WindowsUpdale.logに記載されているcabファイルのURLをゲットする」 という手段が紹介されていた→ URL なるほど。ということで、インターネット接続できる1607で「日本語補助フォント」をインストールし その後、PowerShellでGet-WindowsUpdatelogを実行。デスクトップにできたログファイルを みるとインストールした時刻近辺に   http://download.windowsupdate.com/c/msdownload/update/software/updt/2016/07/microsoft-windows-languagefeatures-fonts-jpan

LS220DのHDD交換

 BuffaloのNASであるLS220Dの赤色LEDが点滅していました。。。 HDD故障だそうです。 元から入っていたのは、東芝の1TB(TOSHIBA DT01ACA1)でした。 手元にWDの2TB(WD20EARS)、4TB(WD40EZRX)、6TB(WD60EZAZ)、SeaGateの4TB(ST4000DM000)、8TB(ST8000AS0002)が あったので、後日容量アップができるのでは、と思い入れてみました。 RAID再構築をクリックしてみたら・・・  WD   2TB:「指定したメソッドに対するパラメータが不正です。」   4TB:「指定したメソッドに対するパラメータが不正です。」   6TB:リビルド成功  SeaGate   4TB:「指定したメソッドに対するパラメータが不正です。」   8TB:「指定したメソッドに対するパラメータが不正です。」 という散々な結果でした。 何がダメなんだろう?と思い返してみると、WDの6TBだけは未使用の ものでした。 ほかのHDDは入れる前にパーティション情報をWindows上で消したけど、 もしかしてMBR領域(というかHDDの先頭セクタ0)になにか情報があると ダメなのかも。 ということで、Linux機にWD 4TB(/dev/sdb)をつないで、  sudo dd if=/dev/zero of=/dev/sdb bs=512 count=1  sudo sgdisk -Z /dev/sdb を実行してからLS220に入れました。 「破損」という表示になってしまいしたが、RAID再構築を押すと 再構築が始まった、、、、ぽい。