11

Attualmente sto sviluppando un'estensione chrome, ho bisogno di accedere ad alcune risorse protette da http-auth (webdav). L'autenticazione HTTP sta utilizzando (nel migliore dei casi) un'autenticazione digest.Evita popup HTTP auth in un'estensione chrome (digest)

Sono in grado di eseguire l'autenticazione direttamente nella richiesta Ajax utilizzando il modulo https://login:[email protected]/path/to/ressource.

Il problema è: se il login/password è errato, non posso semplicemente ottenere uno stato 401 (non autorizzato), Chrome apre la normale finestra di autenticazione. Quale non voglio perché è confuso per l'utente e non posso salvare le credenziali da qui.

MODIFICA: Un altro caso di utilizzo che ho affrontato è: Voglio verificare se una risorsa è protetta da password senza provare a fornire credenziali per accedervi effettivamente.

Qualche idea su come catturare il 401 senza inserire la casella di autenticazione di Chrome?

risposta

4

I team di Google Chrome hanno implementato l'evento onAuthRequired in Google Chrome 22, quindi ora è possibile rilevare quando è richiesta l'autenticazione di base HTTP.

Infatti, ho scritto un'estensione che invia automaticamente le credenziali di autenticazione di base HTTP utilizzando l'evento onAuthRequired.

E 'disponibile gratuitamente nel Google Chrome Web Store ufficiale: https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn

esempio di utilizzo di evento onAuthRequired:

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

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

È necessario aggiungere i permessi giusti per il file manifesto, al fine di usa l'onAuthRequired.

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

Scaricare le estensioni e controllare il codice sorgente per un approccio migliore.

Dovrebbe funzionare anche se la richiesta è stata avviata da un altro interno.

+0

Sembra carino, grazie! Per favore, qualcuno per confermare/infirm quello? (La mia mente è ora lontana da quelle preoccupazioni, quindi non lo farò io stesso). –

+1

Ciao, volevo farti sapere che questo codice deve essere aggiornato. Devi restituire un oggetto come questo: return {authCredentials: {username: 'XXX', password: 'XXX'}} Almeno questo è ciò che ha funzionato per me. –

0

Penso che sia impossibile. Se si utilizza il client http del browser, verrà richiesto all'utente per le credenziali su un 401.

MODIFICA: Over in mozilla land https://developer.mozilla.org/en/XMLHttpRequest check out "mozBackgroundRequest".

+0

Temo di sì: -x.Peccato, sembra che non ci sia modo di accedere a un webdav * agevolmente * da un'estensione. –

3

E 'davvero sembra essere una mancanza di comportamento cromo, altre persone sono desiderosi di vedere qualcosa come il mozBakgroundRequest Chris evidenziati, c'è già un un bug report for that.

Ci sono (hacker) soluzioni alternative suggerite da alcuni sviluppatori nel bugtracker:

  • utilizzare un WebWorker e un timeout per eseguire la richiesta
  • fare lo stesso con lo sfondo pagina

In entrambi i casi, il vantaggio è che non farà scoppiare una casella di autenticazione ... Ma non saprai mai se si tratta di un vero timeout del server o di un 401. (Non ho testato quei workaround).

Problemi correlati