2009-05-30 13 views
13

Piszę niektóre funkcje dynamiczne po stronie przeglądarki i za pomocą HTTP Basic Auth, aby chronić niektóre zasoby. Doświadczenie użytkownika jest bardzo ważne i wysoce spersonalizowane.Jak ustawić Firefoksa w wyświetlaniu monitu o nazwę użytkownika/hasło za pomocą HTTP Basic Auth z JQuery AJAX?

Oto prosty test metoda JQuery, że w końcu będzie testować jeśli użytkownik dostarczył odpowiednie poświadczenia w formie:

$(document).ready(function() { 
    $("#submit").click(function() { 
    var token = Base64.encode($('#username').val() + ':' + $('#password').val());   
    $.ajax({ 
     url: '/private', 
     method: 'GET', 
     async: false, 
     beforeSend: function(req) { 
     req.setRequestHeader('Authorization', 'test:password'); 
     }, 
     error: function(request, textStatus, error) { 
     if (request.status == 401) { 
      alert('401'); 
     } 
     } 
    }); 
    return false; 
    }); 
}); 

Jeśli nie uzyska się dostęp do /private, w tej chwili powinien widzą tylko pole ostrzeżenia. Jednak w przeglądarce Firefox pojawia się formularz logowania do przeglądarki (aby spróbować ponownie z nowymi danymi uwierzytelniającymi). Safari tego nie robi.

Chcemy całkowicie kontrolować wrażenia związane z niestandardowymi formularzami, zanikami, przejściami itp. Jak mogę zapobiec wyświetlaniu domyślnego okna przeglądarki Firefox? (. Jeśli to będzie problem, gdy testujemy dla IE, chciałbym usłyszeć rozwiązań tam, zbyt)

+1

Uwaga obserwacja pod adresem http://stackoverflow.com/questions/928967/can-i-coerce-apache-into-not-include-a-www-authenticate-header-for-failed-http. –

Odpowiedz

3

Niestety, trafiam tutaj na tę samą sprawę.

Moim zdaniem, Przeglądarki nie powinny pytać o xmlhttprequest. Naprawdę chciałbym, żeby ktoś naciskał, ponieważ ludzie naprawdę chcą przenieść się do jQuery w celu zaspokojenia swoich potrzeb.

Tu jest pomoc, którą mogę ci dać, znalazłem tę rzecz jQuery Digest, nie mam pojęcia, co ona naprawdę robi, lub coś w tym stylu, ale jeśli ktoś mógłby wziąć ten kod we właściwy sposób, moglibyśmy mieć autoryzację skrótu jquery system.

https://www.openhub.net/p/digestj

to myślę z tym poręczne nowej opcji AuthDigestDomain, możemy mieć powyższy scenariusz przepisany lub cokolwiek i mieć zabezpieczony obszar „związane” razem i mogliśmy ominąć ten problem raz na zawsze. Cóż ... powodzenia =)

35

Rozwiązaniem jest ustawienie nagłówka WWW-Authenticate na coś innego niż Basic. Na przykład ustawić go:

WWW-Authenticate: None 

lub

WWW-Authenticate: FormBased 

jeśli używasz formularza logowania oparte. Wtedy przeglądarka nie wyświetli okna logowania.

+1

Jak wskazano w komentarzu do odpowiadającej odpowiedzi na pytanie. "WWW-Authenticate" powinien wskazywać jedno (lub więcej) prawidłowe wyzwanie. I ja też myślę, że "Żaden" nie jest prawdziwy. http://stackoverflow.com/questions/1748374/http-401-whats-an-appropriate-www-authenticate-header-value#comment-33722946 – mems

+1

Proszę spojrzeć tutaj, aby znaleźć rozwiązanie, jak rozwiązać to z Javą i ** Spring Security **: http://stackoverflow.com/questions/19079687/rest-call-on-expired-session-http-401-response-causes-browser-to-display-login/19102959#19102959 – lanoxx

+1

To jest * * rozwiązanie, chociaż wygląda nieregularnie. https://www.ietf.org/rfc/rfc2617.txt (4.6) określa wiele schematów, jednak nie ogranicza się do wersji Basic, Digest itp.Tak więc do klienta (przeglądarki) należy obsługa schematu lub nie, jeśli schemat nie jest obsługiwany, przeglądarka nie wykonuje żadnej interakcji użytkownika. Używam tego podejścia do przezroczystego przejścia awaryjnego z Windows SSO (SPNEGO) na prosty formularz logowania. BTW: działa niezawodnie tylko w Chrome + IE podczas uzyskiwania dostępu do serwera za pośrednictwem nazwy hosta; nie używaj adresów IP. – comeGetSome

Powiązane problemy