使用 DigestAuth 时不存在 PHP 和 AUTH_DIGEST 变量

使用 DigestAuth 时不存在 PHP 和 AUTH_DIGEST 变量

我想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');
}

(请注意uniqid() 不应该在此处使用。相反,使用以下方式创建 nonceOpenSSL

相关内容