Como outros apontaram, a única maneira de alterar o comportamento do navegador é garantir que a resposta não contenha um código de status 401 ou, se contiver, não inclua o WWW-Authenticate: Basic
cabeçalho. Como alterar o código de status não é muito semântico e indesejável, uma boa abordagem é remover o WWW-Authenticate
cabeçalho. Se você não pode ou não deseja modificar seu aplicativo de servidor web, você sempre pode servir ou proxy através do Apache (se você ainda não estiver usando o Apache).
Aqui está uma configuração para o Apache reescrever a resposta para remover o cabeçalho WWW-Authenticate IFF que a solicitação contém contém o cabeçalho X-Requested-With: XMLHttpRequest
(que é definido por padrão pelas principais estruturas Javascript, como JQuery / AngularJS, etc ...) E a resposta contém o cabeçalho WWW-Authenticate: Basic
.
Testado em Apache 2.4 (não tenho certeza se funciona com 2.2). Isso depende do mod_headers
módulo que está sendo instalado. (No Debian / Ubuntu, sudo a2enmod headers
e reinicie o Apache)
<Location />
# Make sure that if it is an XHR request,
# we don't send back basic authentication header.
# This is to prevent the browser from displaying a basic auth login dialog.
Header unset WWW-Authenticate "expr=req('X-Requested-With') == 'XMLHttpRequest' && resp('WWW-Authenticate') =~ /^Basic/"
</Location>