11

Obecnie rozwijam rozszerzenie chrome, potrzebuję dostępu do niektórych zasobów chronionych httph (webdav). Autoryzacja HTTP używa (w najlepszym wypadku) uwierzytelnienia digest.Unikaj auth popup HTTP w rozszerzeniu chrome (digest)

Jestem w stanie zrobić auth bezpośrednio w żądaniu ajax, używając formularza https://login:[email protected]/path/to/ressource.

Problem polega na tym, że jeśli login/hasło są nieprawidłowe, nie mogę po prostu uzyskać statusu 401 (nieautoryzowanego), Chrome wyświetla zwykłe okno dialogowe uwierzytelniania. Którego nie chcę, bo to jest mylące dla użytkownika i nie mogę zapisać referencji stąd.

EDYCJA: Kolejnym przypadkiem, w którym stanąłem, jest: Chcę sprawdzić, czy zasób jest chroniony hasłem, bez próby podania danych uwierzytelniających, aby uzyskać do niego dostęp.

Jakieś pomysły, jak złapać 401 bez otwierania okna autorskiego Chrome?

Odpowiedz

4

Zespoły Google Chrome wprowadziły zdarzenie onAuthRequired w przeglądarce Google Chrome 22, dzięki czemu można teraz wykryć, kiedy wymagane jest podstawowe uwierzytelnianie HTTP.

W rzeczywistości napisałem rozszerzenie, które automatycznie wysyła poświadczenia podstawowego uwierzytelniania HTTP za pomocą zdarzenia onAuthRequired.

Jest on dostępny za darmo w oficjalnym sklepie internetowym Google Chrome: https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn

Przykład użycia imprezy onAuthRequired:

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

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

Trzeba dodać odpowiednie uprawnienia do pliku manifestu w celu użyj parametru onAuthRequired.

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

Pobierz rozszerzenia i sprawdź kod źródłowy, aby uzyskać lepsze rozwiązanie.

Powinno działać, nawet jeśli żądanie zostało zainicjowane z innego numeru wewnętrznego.

+0

Wydaje się, dziękuję! Proszę, ktoś to potwierdzić/ułagodzić? (Mój umysł jest daleki od tych trosk, więc ja nie będę). –

+1

Witam, chciałem poinformować, że ten kod musi zostać zaktualizowany. Musisz zwrócić taki obiekt: return {authCredentials: {username: 'XXX', password: 'XXX'}} Przynajmniej to mi się udało. –

0

Myślę, że to niemożliwe. Jeśli korzystasz z klienta HTTP przeglądarki, wówczas wyświetli się monit o podanie danych logowania na numer 401.

EDYCJA: W terenie z mozilla https://developer.mozilla.org/en/XMLHttpRequest sprawdź "mozBackgroundRequest".

+0

Obawiam się, że: -x.Szkoda, wydaje się, że nie ma możliwości uzyskania dostępu do webdav * płynnie * z rozszerzenia. –

3

naprawdę wydaje się być brak w chromowaną zachowań innych ludzi, którzy chcą zobaczyć coś jak mozBakgroundRequest Chris podświetlona, ​​a tam już na bug report for that.

Istnieje (hackish) obejścia sugerowane przez niektórych deweloperów w bugtracker:

  • korzystania z WebWorker i timeout na prośbę
  • zrobić to samo ze strony tle

W obu przypadkach korzyścią jest to, że nie pojawi się okno uwierzytelniania ... Ale nigdy się nie dowiesz, czy jest to prawdziwy limit czasu serwera, czy 401 (nie testowałem tych obejść).