我想Http Digest Authentication
在我的 apache 服务器上进行设置。
因此我启用了 apache 模块auth_digest
并重新启动了 apache 服务器。我还将以下内容添加到我的VirtualHost
:
<Directory "/var/www/example/web/htdocs">
AuthType Digest
Require valid-user
AuthDigestProvider file
Options Indexes FollowSymlinks MultiViews
AllowOverride All
Require all granted
</Directory>
之后我重新启动了我的网络服务器。
根据PHP 文档我现在应该有一个$_SERVER['PHP_AUTH_DIGEST'])
,但是由于某种原因,该PHP_AUTH_DIGEST
键没有出现在我的$_SERVER
数组中。
我该如何解决这个问题?
顺便说一句:我想检查数据库中的授权,而不是使用服务器上的文件
答案1
文档里不是这么说的。
如果你在 Web 服务器 (mod_auth_digest) 中处理 HTTP 身份验证,那么它将消耗身份验证标头,并且仅报告已验证的用户名 (REMOTE_USER)。它不会将它们转发给 PHP,因为摘要是无用因为它已经通过 httpd 验证。
相反,你的 PHP 脚本需要发送身份验证请求标头本身。如您链接到您自己的示例所示:
if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
die('Text to send if user hits Cancel button');
}