Проблемы с аутентификацией Lighttpd mod_auth в Safari (iPad и iPhone)
Я установил lighttpd на своем встроенном устройстве и настроил модули в lighttpd.conf
При доступе к веб-страницам из Chrome или Firefox с ПК меня спрашивают имя пользователя и пароль, и после их загрузки страница загружается.
Когда я делаю то же самое на iPad или iPhone Browser, я также получаю диалоговое окно аутентификации, но по какой-то причине оно появляется неоднократно.
С использованием 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 и т. Д. Есть ли способ заставить его использовать учетные данные, предоставленные пользователем в диалоговом окне?
1 ответ
auth.require = (
"/" =>
(
"method" => "digest",
"realm" => "myRealm",
"require" => "valid-user"
)
)
Это потому, что вы используете дайджест-проверку подлинности, которая не поддерживается / глючит в некоторых браузерах. Вы должны либо использовать базовый метод (который не является безопасным), либо реализовать собственную аутентификацию с использованием файлов cookie. Если вы заинтересованы в безопасном и эффективном решении для аутентификации (встроенная защита против атак методом перебора и совместного использования аккаунта), пожалуйста, посетите наш сайт: http://www.finesec.com/