Ответ сервера с другим заголовком WWW-Authenticate в зависимости от того, сделан ли запрос браузером или почтальоном

Контекст:
У меня есть форма входа в SPA, которая делает AJAX-вызов Silex-PHP API. Если учетные данные верны, все работает гладко. Если учетные данные неверны, сервер возвращает 401 Unauthorized, и Firefox / Chrome показывает форму входа по умолчанию.

я прошел сквозь этот а также этот вопросы, чтобы попытаться избежать запроса браузера.

Одним из предлагаемых решений является установка заголовка WWW-Authenticate в ответе на что-то отличное от Basic. Что я сделал в своем Silex API с:

$response->headers->set('WWW-Authenticate', 'FormBased');

При отправке запроса через Почтальон он показывает, что работает:

Cache-Control → no-cache
Connection → Keep-Alive
Content-Type → application/json
Date → Fri, 30 Jan 2015 19:13:49 GMT
Keep-Alive → timeout=5, max=100
Server → Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8
PHP/5.6.2 mod_ssl/2.2.29 OpenSSL/0.9.8y DAV/2 mod_perl/2.0.8 Perl/v5.20.0
Transfer-Encoding → chunked
WWW-Authenticate → FormBased <------------------------
X-Powered-By → PHP/5.6.2

Однако при выполнении запроса через браузер AJAX ответ выглядит так:

Cache-Control   no-cache
Connection  Keep-Alive
Content-Type    text/html; charset=UTF-8
Date    Fri, 30 Jan 2015 19:03:11 GMT
Keep-Alive  timeout=5, max=74
Server  Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8
PHP/5.6.2 mod_ssl/2.2.29 OpenSSL/0.9.8y DAV/2 mod_perl/2.0.8 Perl/v5.20.0
Transfer-Encoding   chunked
WWW-Authenticate    Basic realm="Secured"  <------------------------
X-Powered-By    PHP/5.6.2

WWW-Authenticate и Content-Type различаются в ответах на один и тот же запрос.

AJAX Call это:

$.ajax({
url:url,
type:'GET',
dataType:"json",
contentType: "application/json",
headers: { 'PHP_AUTH_USER' : formValues.username, 'PHP_AUTH_PW' : formValues.password },
success:function (data) {
console.log(["Login request details: ", data]);

if(data.error) {  // If there is an error, show the error messages
console.log('error data');
}
else { // If not, send them back to the home page
App.trigger("home:show");
}
},
error:function(){
console.log('error logging in');
},
statusCode: {
401: function(){
console.log('401 invalid credentials');
}
}
});

Чем могут отличаться ответы? Как я могу удалить или переопределить заголовок WWW-Authenticate в ответе для браузеров?

0

Решение

Это связанный вопрос и как я наконец решил проблему:

Как переписать класс из компонента безопасности?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]