11

Je développe actuellement une extension de chrome, j'ai besoin d'accéder à certaines ressources http-auth protégées (webdav). L'authentification HTTP utilise (dans le meilleur des cas) une authentification Digest.Évitez HTTP popup popup dans une extension de chrome (digest)

Je suis en mesure de faire l'auth directement dans la requête ajax en utilisant le formulaire https://login:[email protected]/path/to/ressource. Le problème est: si le login/mot de passe est faux, je ne peux pas obtenir un statut 401 (non autorisé), Chrome affiche la boîte de dialogue d'authentification habituelle. Ce que je ne veux pas, c'est déroutant pour l'utilisateur et je ne peux pas enregistrer les informations d'identification d'ici.

EDIT: Un autre cas d'utilisation auquel je suis confronté est: Je veux vérifier si une ressource est protégée par mot de passe sans essayer de fournir des informations d'identification pour y accéder.

Des idées sur la façon d'attraper le 401 sans ouvrir la boîte d'authentification de Chrome?

Répondre

4

Les équipes Google Chrome ont implanté l'événement onAuthRequired dans Google Chrome 22, il est donc désormais possible de détecter si l'authentification HTTP de base est requise.

En fait, j'ai écrit une extension qui envoie automatiquement les informations d'identification HTTP Basic Authentication en utilisant l'événement onAuthRequired.

Il est disponible gratuitement dans la boutique web officiel de Google Chrome: https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn

Exemple d'utilisation de l'événement onAuthRequired:

sendCredentials = function(status) 
{ 
    console.log(status); 
    return {username: "foo", password: "bar"}; 
} 

chrome.webRequest.onAuthRequired.addListener(sendCredentials, {urls: ["<all_urls>"]}, ["blocking"]); 

Vous devez ajouter les permissions au fichier manifeste pour utilisez l'option onAuthRequired.

"permissions": [ "http://*/*", "https://*/*", "webRequest", "webRequestBlocking", "tabs" ], 

Téléchargez les extensions et vérifier le code source pour une meilleure approche.

Cela devrait fonctionner même si la requête a été initiée à partir d'un autre poste.

+0

Semble gentil, merci! S'il vous plaît, quelqu'un pour confirmer/infirmer cela? (Mon esprit est maintenant loin de ces préoccupations, donc je ne le ferai pas moi-même). –

+1

Salut, je voulais vous faire savoir que ce code doit être mis à jour. Vous devez retourner un objet comme ceci: return {authCredentials: {nom d'utilisateur: 'XXX', mot de passe: 'XXX'}} Au moins, c'est ce qui a fonctionné pour moi. –

0

Je pense que c'est impossible. Si vous utilisez le client http du navigateur, il demandera à l'utilisateur des informations d'identification sur un 401.

EDIT: Sur le terrain mozilla https://developer.mozilla.org/en/XMLHttpRequest, consultez "mozBackgroundRequest".

+0

Je le crains: -x.Dommage, il semble qu'il n'y ait aucun moyen d'accéder à un webdav * en douceur * depuis une extension. –

3

Il est semble vraiment être un manque de comportement chrome, d'autres personnes sont désireux de voir quelque chose comme mozBakgroundRequest Chris mises en évidence, il déjà un bug report for that.

Il y a des solutions de contournement (hackish) proposées par certains développeurs dans le bugtracker:

  • utiliser un Webworker et un délai d'attente pour effectuer la demande
  • faire la même chose avec la page d'arrière-plan

Dans les deux cas, l'avantage est qu'il ne fera pas apparaître une boîte d'authentification ... Mais vous ne saurez jamais s'il s'agit d'un vrai délai de serveur ou d'un 401. (Je n'ai pas testé ces solutions).