2012-06-25 8 views
8

HTTP temel kimlik doğrulaması olan bir sunucum var ve yukarıdaki HTTP sunucusu için kullanıcı adı ve şifreyi bilen istemci komut dosyasına sahibim. Yetkilendirme üstbilgilerini ayarlamak için XHR isteğini kullanıyorum ve setRequestHeader kullanıyorum, bu bit tarayıcının varsayılan HTTP oturum açma iletişimini sormasını engelliyor.http başlıklarını tarayıcı tarafından oluşturulan isteklere ayarlayın.

request.setRequestHeader('Authorization', authInfo); 

Bu AJAX için ister, ancak durumda bahsettiğim sunucudan dosya indirmek istiyorum ve AJAX olmadan gidip tarayıcı isteğini kendisi oluşturup nerede JavaScript dan window.location.href gibi bir şey kullanmak zorunda değilim normaldir. Bu istek Yetkilendirme üstbilgisini içermediğinden (brwoser, her istek için Yetkilendirme başlığını, yalnızca oturum açma iletişimini istedikten ve gerçek sunucu için giriş bilgilerinin taban64'ü kaydedildikten sonra otomatik olarak ekler) tarayıcım, kaçınmak istediğim HTTP oturum açma iletişimini ister.

Tarayıcı tarafından oluşturulan non-ajax istekleri için üstbilgileri ayarlamanın bir yolu var mı?

cevap

2

URL'de kullanıcı adı ve parola ayarlamayı denediniz mi?

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

O Internet Explorer 7+ maalesef hariç çoğu tarayıcıda çalışması gerektiğini düşünüyorum.

Alternatif olarak, sunucuya erişiminiz varsa, sunucu tarafında kimlik doğrulamak için çerezleri kullanan bir komut dosyası koyabilirsiniz. Çerezler JavaScript ile ayarlanabilir.

+0

[CSRF saldırıları] için auth tanımlama bilgilerinin kötüye kullanılabileceğini unutmayın (http://en.wikipedia.org/wiki/Cross-site_request_forgery) – user123444555621

+0

Teşekkürler, bu işe yaradı. Ne yazık ki, sunucu tarafında kod yorumcum yok, bu yüzden ikinci yoldan gelemiyorum. – ggat

+0

İlk yaklaşım hakkında sadece bir not, örneğin: base64 kodlanmış bir şey gibi kullanıcı şifresini bir yolu var mı. Sanırım bu, örneğin base64 kodlu kullanıcı ve şifrenin URL'ye gönderilmesi, sunucu tarafında bu dizinin kodunun çözülmesi ve apache ile yeni URL'nin yeniden yönlendirilmesi yoluyla yapılabilir. Bu indirildiğinden kullanıcı tarayıcıların adres çubuğuna kodu çözülmüş URL'yi görmeyecektir. Fakat şunu soruyorum, bunu yapmak için yerel bir yol var. – ggat