13 votes

Comment empêcher Firefox de demander un nom d'utilisateur/mot de passe avec HTTP Basic Auth avec JQuery AJAX ?

J'écris une fonctionnalité dynamique côté navigateur et j'utilise HTTP Basic Auth pour protéger certaines ressources. L'expérience de l'utilisateur est très importante et très personnalisée.

Voici une méthode JQuery de test simple qui permet de vérifier si un utilisateur a fourni les bonnes informations d'identification dans un formulaire :

$(document).ready(function() {
    $("#submit").click(function() {
    var token = Base64.encode($('#username').val() + ':' + $('#password').val());        
    $.ajax({
      url: '/private',
      method: 'GET',
      async: false,
      beforeSend: function(req) {
        req.setRequestHeader('Authorization', 'test:password');
      },
      error: function(request, textStatus, error) {
        if (request.status == 401) {
          alert('401');
        }
      }
    });
    return false;
  });
});

S'ils ne sont pas autorisés à accéder /private Pour l'instant, ils ne devraient voir que la boîte d'alerte. Cependant, sur Firefox, un formulaire de connexion fourni par le navigateur apparaît (pour réessayer avec de nouvelles informations d'identification). Safari ne fait pas cela.

Nous voulons contrôler complètement l'expérience avec des formulaires personnalisés, des fondus, des transitions, etc. Comment puis-je empêcher l'affichage de la boîte par défaut de Firefox ? (Si ce problème se pose lorsque nous testons IE, j'aimerais connaître les solutions possibles dans ce cas également).

37voto

lanoxx Points 1407

La solution consiste à définir le WWW-Authenticate à quelque chose d'autre que Basic . Par exemple, le réglage est le suivant : :

WWW-Authenticate: None

ou

WWW-Authenticate: FormBased

si vous utilisez un formulaire de connexion. Dans ce cas, le navigateur n'affichera pas de fenêtre de connexion.

4voto

karim79 Points 178055

Au cas où vous ne l'auriez pas lu :

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

Cela ne semble pas très prometteur :)

3voto

Kyle Hotchkiss Points 1902

Malheureusement, je rencontre le même problème.

À mon avis, les navigateurs ne devraient pas afficher une invite pour une demande xmlhttprequest. J'aimerais vraiment que quelqu'un le fasse, car les gens veulent vraiment passer à jQuery pour leurs besoins d'authentification.

Et bien voici l'aide que je peux vous apporter, j'ai trouvé ce truc jQuery Digest, je n'ai aucune idée de ce qu'il fait vraiment ou quoi que ce soit, mais si quelqu'un pouvait prendre ce code de la bonne façon, nous pourrions avoir un système d'authentification jquery digest.

https://www.openhub.net/p/digestj

Je pense qu'avec cette nouvelle option AuthDigestDomain, nous pourrions réécrire le script ci-dessus et faire en sorte que la zone sécurisée soit "liée" et que nous puissions résoudre ce problème une fois pour toutes. Bon... bonne chance =)

1voto

Jacek Points 21

J'ai trouvé quelque part une solution à ce problème de popup d'authentification.

WWW-Authenticate: None

ne fonctionne pas pour moi, mais j'ai ajouté

'Authorization': 'Basic'

aux en-têtes et cela fonctionne à merveille.

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