Назад | Перейти на главную страницу

HTTP-аутентификация Apache2: не запрашивать учетные данные, немедленно вернуть 401

У меня есть веб-сервер Apache 2.4, который обслуживает некоторые файлы, которые должны быть видны публике, а другие должны быть видны только после аутентификации, которую я реализовал с помощью AuthType Basic директива в .htaccess файл.

К файлам с ограниченным доступом никогда не сможет получить доступ человек с браузером, а только из программного обеспечения, которое запрашивает их и включает учетные данные аутентификации в заголовок HTTP.

Если доступ к сайту осуществляется без предоставления учетных данных непосредственно в заголовке (например, в браузере), я хочу, чтобы Apache возвращал 401 Unauthorized статус сразу и не показывать диалог аутентификации. Это возможно?

Я не думаю, что это возможно. В соответствии с https://httpstatuses.com/401 ошибка 401 должна быть отправлена ​​с полем WWW-аутентификации, которое, вероятно, вызовет диалоговое окно (возможно, вы могли бы попробовать неизвестный тип аутентификации, но я предполагаю, что это не будет работать надежно)

Существует большое количество кодов состояния серии 400 (https://httpstatuses.com/ ) - почему бы не использовать другой? 403, казалось бы, идеально описывает вашу потребность.

Вы не можете сделать это, отправив только ответ 401 Unauthorized (как уже указывал @davidgo). Однако вы не можете просто отправить вместо этого еще один статус 4xx; вам нужно и то, и другое.

Вам потребуется базовая аутентификация HTTP (т. Е. Потенциальный ответ «401 неавторизован»), когда Authorization Заголовок HTTP-запроса отправляется из вашего программного обеспечения, но отвечает 403 Запрещено, если аутентификация не была предпринята при первоначальном запросе (то есть запрос браузера по умолчанию).

В Apache 2.4 вы можете использовать выражения Apache, чтобы сделать это условным ...

# Check if "Authorization: Basic ..." HTTP request header has been sent 
<If "%{HTTP:Authorization} =~ /^Basic\s./">
    AuthType Basic
    AuthName "Private Area"
    AuthUserFile "/home/user/.htpasswds/secret"
    Require valid-user
</If>
<Else>
    # 403 Forbidden all requests that have not sent an "Authorization" header
    Require all denied
</Else>

При предоставлении программного обеспечения отправляются правильные учетные данные в Authorization заголовок, то ему должен быть разрешен доступ. Если ваше программное обеспечение должно отправлять неправильно учетные данные, то будет возвращен ожидаемый ответ 401 Неавторизованный. В противном случае любой запрос, который не отправляет Authorization заголовок просто получит сообщение 403 Forbidden и без запроса пароля.