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ść).

Powiązane problemy