Уже есть несколько вопросов, которые просят подавить диалоговое окно HTTP-аутентификации браузера, и они, кажется, предполагают, что это диалоговое окно автоматически появляется, когда код ответа 401
и заголовок WWW-Authenticate
присутствует в ответе.
Я создаю веб-приложение, которое вызывает RESTful API с использованием Ajax, защищенного базовой HTTP-аутентификацией. Я работаю как над веб-приложением, так и над API.
По умолчанию, когда требуется аутентификация, но ее нет, просто выдается ошибка
{"error":"Authentication required"}
со статусом 404
. Однако я хотел бы создать одну конечную точку, /user/login
, которая возвращает код 401
и заголовок WWW-Authenticate
, когда в запросе нет действительного заголовка Authorization
. Я знаю, что это не совсем RESTful, но должно работать.
Теперь я реализовал это, и когда я открываю конечную точку в своем браузере, она работает нормально: отображается диалоговое окно браузера. Однако, когда я запрашиваю конечную точку с помощью Ajax, диалоговое окно не отображается (как в Chromium, так и в Firefox).
Как принудительно отобразить это диалоговое окно с запросом Ajax, если это вообще возможно?
Точный ответ сейчас:
HTTP/1.1 401 Unauthorized
Server: nginx/1.4.6 (Ubuntu)
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.5.9-1ubuntu4.9
Access-Control-Allow-Origin: http://my-url
Cache-Control: no-cache
Date: Thu, 07 May 2015 12:21:10 GMT
WWW-Authenticate: Basic realm="Please login"
Please login