Mes utilisateurs entrent un nom d'utilisateur et un mot de passe pour un service tiers. Je fais un appel Ajax à ce service pour leur authentifier. Le problème est que s'ils entrent dans le mauvais nom d'utilisateur et mot de passe, le navigateur (au moins Firefox) affiche une boîte de dialogue "Authentification requise". S'ils entrent ensuite le nom d'utilisateur et le mot de passe corrects dans cette boîte de dialogue, mon appel AJAX retournera un "succès", et il apparaît que l'utilisateur / passe d'origine qu'ils sont entrés étaient corrects, quand il n'est pas (puisqu'ils l'ont changé). Y a-t-il un moyen de supprimer cette boîte de dialogue (donc je peux alors avoir mon service leur dire de corriger leur utilisateur / votre passe) ou de saisir en quelque sorte le nom d'utilisateur et le mot de passe corrects que l'utilisateur entré dans la boîte de dialogue Browersers? Ceci est une extension Firefox .. Donc, je suis sûr qu'il y a un moyen de saisir la bonne passe / connexion à partir de la demande. Mais ce serait bien s'il y avait une méthode plus simple via JavaScript. P>
jQuery.ajax({ type: "GET", dataType: "xml", url: endpoint, username: username, password: password, success: function(data,status) { // Do something }, error: function(XMLHttpRequest, textStatus, errorThrown){ alert(errorThrown); } });
5 Réponses :
au lieu de la chaîne d'URL étant " http://blah.com ", faites-le " http: // utilisateur: mot de passe@blah.com "
Cela résoudrait-il vraiment le problème? J'attendrais que si le nom d'utilisateur et le mot de passe spécifié dans l'URL étaient incorrects, le serveur distant émettrait toujours une réponse 401 ...
Vous ne pouvez pas le faire dans IE ou Firefox, et vous ne pourrez jamais du JavaScript pour des raisons de sécurité. Il n'y a pas de paramètre de navigateur qui permet à l'utilisateur d'éviter d'être invité à l'authentification HTTP. Cela devient réel ennuyeux lorsque vous avez 50 images nécessitant une authentification HTTP. P>
J'ai résolu ce problème en mettant un proxy entre le navigateur et le service qui nécessite une authentification, dans mon cas, un servlet Java. Le navigateur envoie la demande Ajax au servlet, qui transfère la demande au service, puis renvoie la réponse des services, omettant l'en-tête "Authentification www". Votre application de navigateur. gère le code de réponse HTTP 200 ou 401 en conséquence. p>
De même, le proxy pourrait toujours revenir à 200 avec une réponse JSON indiquant les résultats de la demande transférée. De cette façon, vous pouvez discerner la différence entre une défaillance de votre proxy et la réponse du service. P>
Une chose délicate que vous devriez avoir à traiter - si le service d'extrémité répond avec un en-tête Set-Cookie, dites parce qu'il a créé une session pour votre client, vous avez (au moins) 2 chemins possibles à prendre. p>
sans jQuery (ne fonctionne pas dans IE, mais c'est correct pour une extension Firefox):
var xhr = new XMLHttpRequest(); xhr.open("GET", "http://example.com", true, "username", "password"); xhr.onreadystatechange = function(){ if(this.readyState == 4){ if(this.status == 200){ alert("we got a response"); } } } xhr.send();
Que diriez-vous de ne pas utiliser l'authentification HTTP? Utilisez un identifiant standard avec des cookies ou postez simplement le nom d'utilisateur / mot de passe que l'utilisateur fournit au script et consultez les détails sur une base de données d'utilisateurs. P>
Il a dit qu'il s'agissait d'un produit tiers.