Я хочу настроить 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 ответ1

2

Это не то, что говорится в документации.

Если вы обрабатываете HTTP-аутентификацию на веб-сервере (mod_auth_digest), он будет использовать заголовки аутентификации и сообщать только о подтвержденном имени пользователя (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() не должен использоваться здесь. Вместо этого создайте одноразовый номер, используя OpenSSL.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .