はじめに
今回本番環境にて外部APIへ疎通確認しなければならない事象が生じたため、
あるページにのみダイジェスト認証を設けた。
Digest認証用のパスワードファイルの作成
サーバーにてhtdigest
コマンドを用いてパスワードファイルを作成します。
$ sudo htdigest -c /var/www/html/.digestpass "Digest Auth" yamato
# コマンドの説明:sudo htdigest -c {ファイルパス} '{領域名}' {ユーザー名}
※ファイルの場所は任意の場所、領域名も任意
以下のコマンドでファイルが作成されたことを確認。
$ cat /var/www/html/.digestpass
yamato:Digest Auth:bce31c0fdafwerkjlwr8cdda656f24b23nifer
アクセスを制御する.htaccessを編集
Laravelプロジェクトの場合は/public
配下にある。
任意の場所に下記を追記。
.htaccess
<IfModule mod_rewrite.c>
※中略
AuthType Digest
AuthName "Digest Auth" #領域名
AuthUserFile "/var/www/html/.digestpass"
Require valid-user
</IfModule>
これでユーザー名とパスワードを求められるが全てのページに認証がかかってしまいます。
ここで本題の指定のページに認証かけるならパスで条件を加える方法です。
以下を追記します。
.htaccess
<IfModule mod_rewrite.c>
※中略
# AllowかRequireいづれかでアクセス許可
Satisfy Any
AuthType Digest
AuthName "Digest Auth"
AuthUserFile "/var/www/html/.digestpass"
Require valid-user
# /connectでDigest認証を求める
SetEnvIf REQUEST_URI "^/connect" restricted_url
Order allow,deny
Allow from all
Deny from env=restricted_url
</IfModule>
これで/connect
でアクセスしたときのみ認証を求められるようになり無事完了!
指定のページに認証を設けるのにbladeファイルのディレクトリに設定ファイル作成?
などさまざま遠回りしながらたどりつきました(^ー^;