125 votes

Comment empêcher le navigateur d'invoquer une popup automatique de base et de gérer l'erreur 401 à l'aide de Jquery?

Je dois envoyer une demande d’autorisation en utilisant l’authentification de base. J'ai réussi à implémenter cela en utilisant jquery. Cependant, lorsque je reçois une erreur 401, le popup de navigateur d’authentification de base s’ouvre et le rappel d’erreur jax ajax n’est pas appelé.

50voto

nwinkler Points 5889

J'ai été confronté à ce problème récemment, trop. Puisque vous ne pouvez pas modifier le navigateur par défaut de l'affichage du popup dans le cas d'un 401 (de base ou digest authentification), il y a deux façons de résoudre ce problème:

  • Modifier la réponse du serveur pour ne pas retourner 401. De retour de 200 code au lieu et à les traiter dans votre JQuery client.
  • Changement de la méthode que vous utilisez pour l'autorisation d'une valeur personnalisée dans votre en-tête. Les navigateurs de l'affichage de la popup pour Basic et Digest. Vous devez changer ce sur le client et le serveur.

    les en-têtes : { "Autorisation" : "BasicCustom" }

Veuillez également prendre lookg à présent un exemple d'utilisation de JQuery avec l'Authentification Basique.

39voto

Ibraheem Points 497

Renvoie un code d'état générique 400, puis traite ce côté client.

Ou vous pouvez conserver le 401 sans renvoyer l'en-tête WWW-Authenticate, ce à quoi répond le navigateur avec le menu contextuel d'authentification. Si l'en-tête WWW-Authenticate est manquant, le navigateur ne demandera pas d'informations d'identification.

15voto

Ivan Samovar Points 1

Vous pouvez supprimer les popups d'authentification de base avec une URL de requête ressemblant à ceci:

 https://username:password@example.com/admin/...
 

Si vous obtenez une erreur 401 (nom d'utilisateur ou mot de passe incorrect), elle sera correctement gérée avec le rappel d'erreur jquery. Cela peut causer des problèmes de sécurité (dans le cas du protocole http au lieu de https), mais cela fonctionne.

2voto

Javier Ferrero Points 3582

Sinon, si vous pouvez personnaliser la réponse de votre serveur, vous pouvez renvoyer un message 403 Forbidden.

Le navigateur n'ouvrira pas le menu contextuel d'authentification et le rappel jquery sera appelé.

0voto

neiker Points 3066

Créez une URL / login, puis acceptez les paramètres "utilisateur" et "mot de passe" via GET et ne nécessitez pas d'authentification de base. Ici, utilisez php, node, java, peu importe, analysez votre fichier passwd et faites correspondre les paramètres (utilisateur / pass) à celui-ci. S'il existe une correspondance, redirigez-le vers http: // utilisateur: pass@domaine.com/ (cela définira les informations d'identification sur votre navigateur) . Sinon , envoyez une réponse 401 (sans en-tête WWW-Authenticate).

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