僕が実際にDigest認証を実装しようとした時に詰まったので、その時の解決方法を共有します。
Digest認証とは
Digest認証とは、HTTP通信におけるユーザー認証の一種で、パスワードを平文で送信するのではなく、ハッシュ値を使って送信することで、セキュリティを強化する認証方式です。これにより、第三者が通信内容を傍受しても、直接パスワードがバレるリスクが減ります。
より安全な認証方式としては、SSL/TLSを使った暗号化やOAuthなどのトークンベース認証が推奨されることが多く、Digest認証の利用は減少しています。
僕個人的にはまだ実際に使われていることもあるなと思っていて、特に一時的に簡易的な認証システムが欲しい時なんかは使われていたりします。
僕の場合はセキュリティの勉強をしていてDigest認証というのを学習したので、実際にどんなものか作ってみようと思って実装してみました。
digest認証に必要な2つのファイル【解決前】
digest認証には『.htaccess』ファイルと『.htpasswd』ファイルが必要です。以下は僕が詰まった時のそれぞれのファイル内のコードです。
『.htaccess』ファイル内
AuthType Digest
AuthName "restricted area"
AuthDigestDomain ./
AuthDigestProvider file
AuthUserFile /Applications/MAMP/htdocs/digest-auth/.htpasswd
Require valid-user
『.htpasswd』ファイル内
test:digest-auth:3f0b2bb7ec067109636d17b1c60e0ef2
解決策
ChatGPTに聞いても指摘されなかったので、気にしていませでしたが、『.htaccess』ファイルのAuthNameと『.htpasswd』ファイルの認証名(自分の場合digest-auth)を揃えないといけなかったみたいです。
修正後
AuthType Digest
AuthName "digest-auth"
AuthDigestDomain ./
AuthDigestProvider file
AuthUserFile /Applications/MAMP/htdocs/digest-auth/.htpasswd
Require valid-user
僕の場合はこれで動きました。
digest認証実装に詰まった時に考えられる他の原因
以下は解決までに僕が実際に試したことです。
他に考えられる原因として以下のような部分に問題があるかもしれません。
パスの見直し
『.htaccess』ファイル内のAuthDigestDomain には認証を実装したいディレクトリのパスを入力します。
このパスは『.htaccess』を配置した場所からの相対パスであるため注意しましょう。
もう一つの可能性としてAuthUserFile に指定するパスが間違っているということが挙げられます。
こちらは『.htpasswd』ファイルが配置されている場所の絶対パスとなります。
MAMPの場合は
/Applications/MAMP/htdocs/~配置された場所まで~/.htpasswd
で大丈夫です。
ブラウザのキャッシュ削除
ブラウザに前のパスワードなどが残っているとうまく動かないとこがあります。
ブラウザのキャッシュを削除してみて、もう一度試してみましょう。
また、一度ログインが完了すると『キャッシュを削除』または『ブラウザを閉じる』までログインが有効となります。
ポップアップが表示されないときはブラウザのキャッシュを削除するかブラウザを一度閉じてみましょう。
パスワードがハッシュ化されていない
Basic認証と同様にDigest認証も『.htpasswd』内のパスワードはハッシュ化されていなければなりません。
ターミナルで以下のコマンドを打ち『.htpasswd』ファイルを作成する。
htdigest -c /Applications/MAMP/htdocs/~配置された場所まで~/.htpasswd "認証の名前" ユーザーネーム
または、パスワードハッシュ化ツールを用いてハッシュ化しましょう。
Digest認証まとめ
今回は僕が実際にDigest認証を行なった時の解決策と他に考えられる原因を紹介しました。
参考になれば幸いです。
以下はBasic認証を行った時の記事です。
セキュリティを学習中の方や気になる方はどうぞ。
コメント