XMLHttpRequest, базовая аутентификация и срок действия пароля

Я использую XMLHttpRequest и basic-auth для доступа к интерфейсу приложения. Пароль является временным и генерируется другим запросом, поэтому срок его действия истекает через некоторое время.

Но браузер (по крайней мере, Firefox) продолжает использовать старый, терпит неудачу и показывает всплывающее окно входа в систему. Если я подавляю всплывающее окно, возвращая 403 для запросов с X-Requested-By и неправильным паролем, Mozilla никогда не пытается использовать новый пароль (firebug показывает новый пароль в запросе, сервер получает старый).

Проблемы можно избежать, добавив случайную «соль» к имени пользователя (и удалив ее на стороне сервера), но есть ли лучший способ заставить XMLHttpRequest использовать предоставленный пароль вместо кэширования?


person ymv    schedule 21.07.2009    source источник


Ответы (1)


Ответы 401 включают «домен аутентификации», который по умолчанию включает все URL-адреса на сервере (см. RFC 2617). Ожидается, что браузер будет предоставлять одни и те же учетные данные для любого вызова из того же домена.

Поскольку вы уже создаете пароль с истекающим сроком действия, почему бы просто не превратить его в токен, который нужно добавлять к каждому запросу? Например, хэш SHA1 имени пользователя, возможно, с отметкой времени. Я предполагаю, что вы будете использовать это как ключ на сервере для получения данных пользователя.

person kdgregory    schedule 21.07.2009
comment
Вы имели в виду 401 ответ? - person ymv; 21.07.2009