Meu aplicativo da web tem uma página de login que envia credenciais de autenticação por meio de uma chamada AJAX. Se o usuário inserir o nome de usuário e a senha corretos, está tudo bem, mas se não, acontece o seguinte:
- O servidor da web determina que, embora a solicitação inclua um cabeçalho de autorização bem formado, as credenciais no cabeçalho não são autenticadas com êxito.
- O servidor da web retorna um código de status 401 e inclui um ou mais cabeçalhos WWW-Authenticate listando os tipos de autenticação suportados.
- O navegador detecta que a resposta à minha chamada no objeto XMLHttpRequest é um 401 e a resposta inclui cabeçalhos WWW-Authenticate. Em seguida, ele exibe uma caixa de diálogo de autenticação pedindo, novamente, o nome de usuário e a senha.
Isso está tudo bem até a etapa 3. Não quero que a caixa de diálogo seja exibida, quero lidar com a resposta 401 em minha função de retorno de chamada AJAX. (Por exemplo, exibindo uma mensagem de erro na página de login.) Quero que o usuário insira novamente seu nome de usuário e senha, é claro, mas quero que eles vejam meu formulário de login amigável e reconfortante, não o padrão feio do navegador caixa de diálogo de autenticação.
A propósito, não tenho controle sobre o servidor, portanto, fazer com que ele retorne um código de status personalizado (ou seja, algo diferente de 401) não é uma opção.
Existe alguma maneira de suprimir a caixa de diálogo de autenticação? Em particular, posso suprimir a caixa de diálogo Autenticação necessária no Firefox 2 ou posterior? Existe alguma maneira de suprimir a caixa de diálogo Conectar a [host] no IE 6 e posterior?
Editar
Informações adicionais do autor (18 de setembro):
Devo acrescentar que o verdadeiro problema com a caixa de diálogo de autenticação do navegador que aparece é que ela fornece informações insuficientes ao usuário.
O usuário acabou de inserir um nome de usuário e senha através do formulário na página de login, ele acredita que digitou ambos corretamente e clicou no botão enviar ou apertou enter. Sua expectativa é que ele seja levado para a próxima página ou talvez seja informado de que inseriu suas informações incorretamente e deve tentar novamente. No entanto, ele é apresentado a uma caixa de diálogo inesperada.
O diálogo não faz reconhecimento do fato de que ele apenas fez entrar um nome de usuário e senha. Não indica claramente que houve um problema e que ele deve tentar novamente. Em vez disso, a caixa de diálogo apresenta ao usuário informações criptografadas como "O site diz: ' [reino] '." Onde [realm] é um nome curto de domínio que apenas um programador poderia amar.
Os designers do navegador da Web, tome nota: ninguém perguntaria como suprimir a caixa de diálogo de autenticação se a caixa de diálogo em si fosse simplesmente mais amigável. O toda razão que eu estou fazendo um formulário de login é que nossa equipe de gerenciamento de produto considera justamente diálogos de autenticação dos navegadores para ser terrível.