97 votes

Comment puis-je supprimer la boîte de dialogue d'authentification du navigateur?

Mon application web est une page de connexion qui envoie les informations d'authentification via un appel AJAX. Si l'utilisateur entre le nom d'utilisateur correct et le mot de passe, tout va bien, mais si pas, le suivant se produit:

  1. Le serveur web détermine que, bien que la demande inclus un bien formée en-tête d'Autorisation, les informations d'identification dans l'en-tête ne sont pas authentifiés.
  2. Le serveur web renvoie un code d'état 401 et comprend un ou plusieurs WWW-Authenticate les en-têtes d'inscription pris en charge types d'authentification.
  3. Le navigateur détecte que la réponse à mon appel sur l'objet XMLHttpRequest est un 401 et la réponse est " WWW-Authenticate en-têtes. Il s'ouvre alors une boîte de dialogue d'authentification demander, encore une fois, pour le nom d'utilisateur et mot de passe.

Ce est tout très bien jusqu'à l'étape 3. Je ne veux pas la boîte de dialogue pop-up, je veux gérer la réponse 401 dans mon AJAX fonction de rappel. (Par exemple, en affichant un message d'erreur sur la page de connexion.) Je veux que l'utilisateur de re-entrer leur nom d'utilisateur et le mot de passe, bien sûr, mais je veux voir mon sympathique, rassurant formulaire de connexion, le navigateur est moche, par défaut de la boîte de dialogue d'authentification.

D'ailleurs, je n'ai pas de contrôle sur le serveur, alors le fait de retourner un code d'état personnalisé (c'est à dire, autre chose qu'un 401) n'est pas une option.

Est il possible que je peux supprimer la boîte de dialogue d'authentification? En particulier, puis-je supprimer le dialogue Authentification Requise dans Firefox 2 ou plus tard? Est-il possible de supprimer la connexion à [hôte] de dialogue dans IE 6 et plus tard?


Modifier
Des informations supplémentaires auprès de l'auteur (Sept. 18):
Je dois ajouter que le vrai problème avec le navigateur de la boîte de dialogue d'authentification pop-up est qu'il n'accordent pas suffisamment d'informations à l'utilisateur.

L'utilisateur a entré un nom d'utilisateur et mot de passe via le formulaire sur la page de connexion, il croit qu'il a tapé les deux correctement, et qu'il a cliqué sur le bouton envoyer, ou appuyez sur enter. Son attente est qu'il sera emmené à la page suivante ou peut-être dit qu'il a entré son information de façon incorrecte et doit essayer de nouveau. Cependant, il est plutôt présenté avec une inattendus de la boîte de dialogue.

La boîte de dialogue ne fait aucune reconnaissance du fait qu'il a juste fait entrer un nom d'utilisateur et mot de passe. Il n'est pas clairement qu'il y avait un problème et qu'il doit essayer de nouveau. Au lieu de cela, la boîte de dialogue présente à l'utilisateur cryptique de l'information comme "Le site dit:"[royaume]'." Où [royaume] est un court nom de domaine que seul un programmeur pouvait aimer.

Navigateur Web designers prendre note: on ne l'a demander, comment faire pour supprimer la boîte de dialogue d'authentification si la boîte de dialogue elle-même étaient tout simplement plus convivial. L' ensemble de raison que je suis en train de faire un formulaire de connexion, c'est que notre équipe de gestion de produits, à juste titre, considère que les navigateurs de l'authentification des dialogues être terrible.

59voto

J'ai rencontré le même problème ici, et le backend ingénieur à ma société a mis en œuvre un comportement qui est apparemment considéré comme une bonne pratique : lors d'un appel d'une URL renvoie un 401, si le client a réglé l'en-tête X-Requested-With: XMLHttpRequest, le serveur tombe l' www-authenticate - tête dans sa réponse.

L'effet secondaire est que l'authentification par défaut popup ne s'affiche pas.

Assurez-vous que votre appel d'API a l' X-Requested-With - tête réglé XMLHttpRequest. Si donc il n'y a rien à faire, sauf changer le comportement de serveur en fonction de cette bonne pratique...

17voto

Marijn Points 752

Je ne pense pas que cela soit possible. Si vous utilisez la mise en œuvre du client HTTP du navigateur, cette boîte de dialogue apparaîtra toujours. Deux hacks viennent à l’esprit:

  1. Peut-être que Flash gère cela différemment (je n'ai pas encore essayé), il serait donc utile de disposer d'une animation flash.

  2. Vous pouvez configurer un "proxy" pour le service auquel vous accédez sur votre propre serveur et lui demander de modifier un peu les en-têtes d'authentification, afin que le navigateur ne les reconnaisse pas.

3voto

jan.vdbergh Points 1024

Quelle technologie de serveur utilisez-vous et utilisez-vous un produit en particulier pour l'authentification?

Étant donné que le navigateur ne fait que son travail, je pense que vous devez changer les choses côté serveur pour ne pas renvoyer un code d'état 401. Cela peut être fait à l'aide de formulaires d'authentification personnalisés qui renvoient simplement le formulaire à nouveau lorsque l'authentification échoue.

2voto

rakslice Points 1939

Dans Mozilla Land, la définition du paramètre mozBackgroundRequest de XMLHttpRequest ( docs ) sur true supprime ces boîtes de dialogue et entraîne simplement l'échec des demandes. Cependant, je ne sais pas quelle est la qualité de la prise en charge inter-navigateurs (notamment si la qualité des informations d'erreur sur ces demandes ayant échoué est très bonne sur tous les navigateurs.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X