Я установил lighttpd на своем встраиваемом устройстве и настроил модули в lighttpd.conf
При доступе к веб-страницам из Chrome или Firefox с ПК меня спрашивают имя пользователя и пароль, и после того, как я их предоставил, страница загружается.
Когда я делаю то же самое в браузере iPad или iPhone, я также получаю диалоговое окно аутентификации, но по какой-то причине оно появляется постоянно.
Используя mod_accesslog
модуль, я смог увидеть, что iPad по-прежнему выполняет запросы без использования аутентификации, что приводит к HTTP 401
по запросу:
192.168.2.33 192.168.2.247 wwwX [10/Apr/2011:16:01:30 +0200] "GET /[...] HTTP/1.1" 304 0 "http://192.168.2.247/" ...
192.168.2.33 192.168.2.247 wwwX [10/Apr/2011:16:01:30 +0200] "GET /[...] HTTP/1.1" 304 0 "http://192.168.2.247/" ...
192.168.2.33 192.168.2.247 - [10/Apr/2011:16:01:33 +0200] "GET /[...] HTTP/1.1" 401 351 "http://192.168.2.247/" ...
192.168.2.33 192.168.2.247 - [10/Apr/2011:16:01:56 +0200] "GET / HTTP/1.1" 401 351 "-" ...
Я также пытался добавить mod_access
модуль, но это ничего не изменило.
Проблема в браузере или в lighttpd
веб-сервер или его модули / конфигурация? Как это исправить?
Соответствующие части моего lighttpd.conf
файл выглядит так:
# mod_auth must be loaded before mod_fastcgi
server.modules = (
"mod_auth",
"mod_cgi",
"mod_fastcgi"
)
Раздел с конфигурацией mod_auth выглядит так:
auth.debug = 0
auth.backend = "plain"
auth.backend.plain.userfile = "/tmp/lighttpd-plain.user"
auth.require = (
"/" =>
(
"method" => "digest",
"realm" => "myRealm",
"require" => "valid-user"
)
)
редактировать:
Я забыл упомянуть одну вещь: веб-страница выполняет запросы AJAX с помощью jQuery. Запросы не устанавливают username
и password
переменные. Во всех браузерах это работает без проблем после того, как пользователь аутентифицировался через всплывающее диалоговое окно браузера.
Я думаю, что запросы AJAX в Safari могут быть теми, которые не используют никаких учетных данных и, таким образом, получают 401 и т. Д. Есть ли способ заставить его использовать учетные данные, указанные пользователем в диалоговом окне?
auth.require = (
"/" =>
(
"method" => "digest",
"realm" => "myRealm",
"require" => "valid-user"
)
)
Это потому, что вы используете дайджест-аутентификацию, которая не поддерживается / не содержит ошибок в некоторых браузерах. Вам следует использовать базовый метод (который небезопасен) или реализовать собственную аутентификацию с использованием файлов cookie. Если вас интересует безопасное и эффективное решение для аутентификации (встроенная защита от атак методом перебора и совместного использования учетных записей), посетите наш сайт: finesec.com