2012-06-25 18 views
8

Mam serwer z podstawowym uwierzytelnianiem HTTP i mam skrypt klienta, który zna nazwę użytkownika i hasło dla powyższego serwera HTTP. Korzystam z żądania XHR i jest to setRequestHeader, aby ustawić nagłówki Authorization. Ten bit pozwala uniknąć wyświetlania domyślnego okna logowania HTTP w przeglądarce.Ustawić nagłówki http na żądania generowane przez przeglądarkę?

request.setRequestHeader('Authorization', authInfo); 

Jest to normalne dla AJAX żąda, ale w przypadku chcę pobrać plik ze wspomnianym serwerze i jestem zmuszony iść bez AJAX i użyć czegoś podobnego window.location.href z JavaScript gdzie przeglądarka tworzy sam wniosek. Ponieważ to żądanie nie będzie zawierać nagłówka Authorization (brwoser doda nagłówek Authorization dla każdego żądania automatycznie tylko po tym, jak wyświetli okno dialogowe logowania i zapisze bazę64 informacji o logowaniu dla rzeczywistego serwera) przeglądarka wyświetli okno dialogowe logowania HTTP, którego chcę uniknąć.

Czy istnieje sposób na ustawienie nagłówków na nie-ajaxowych: żądań utworzonych przez przeglądarkę?

Odpowiedz

2

Czy próbowałeś ustawić nazwę użytkownika i hasło w adresie URL?

location.href = 'http://user:[email protected]/path/to/download'; 

myślę, że powinien działać w większości przeglądarek z wyjątkiem niestety Internet Explorer 7+.

Alternatywnie, jeśli masz dostęp do serwera, możesz umieścić skrypt po stronie serwera, który używa plików cookie do uwierzytelnienia. Pliki cookie można ustawić za pomocą JavaScript.

+0

Pamiętaj, że pliki cookie auth mogą być nadużywane w przypadku [ataków CSRF] (http://en.wikipedia.org/wiki/Cross-site_request_forgery) – user123444555621

+0

Dzięki, to zadziałało. Niestety, nie mam interpretera skryptów po stronie serwera, więc nie mogę przejść w drugą stronę. – ggat

+0

Tylko jedna uwaga dotycząca pierwszego podejścia, czy istnieje sposób przekazania użytkownika: hasło na przykład zakodowane w base64 lub coś podobnego. Myślę, że można to zrobić, wysyłając na przykład kodowany przez użytkownika base64 i hasło w adresie URL, dekodując ten ciąg po stronie serwera i przekierowując nowy adres URL za pomocą apache. Ponieważ jest to pobieranie, użytkownik nie zobaczy odkodowanego adresu URL na pasku adresu przeglądarki. Ale pytam, może istnieje natywny sposób, aby to zrobić. – ggat

Powiązane problemy