2010-03-16 54 views
5

HTTP temel kimlik doğrulama başlık satırını bir kimlik doğrulama tanımlama bilgisinde saklamak istiyorum, böylece sonraki isteklerde yetkilendirme üstbilgisi ile uğraşmak zorunda kalmam (jQuery kullanıyorum):Ajax: HTTP Temel Kimlik doğrulama ve kimlik doğrulama bilgisi

Bu iken
authenticate: function(auth) { 
    var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password); 
    document.cookie = "Authorization: " + header; 
    $.ajax({ 
     type: "GET", 
     url: "http://someurl", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: auth.success, 
     error: auth.error 
    }); 
}, 

sonraki yetkilendirme başlıkları üzerine eklenmiş ve olmanızdan, tarayıcı oturumu içinde herhangi diğer kullanıcılar için çalışmaz, günlükleri ilk kullanıcı için çalışıyor gibi görünüyor. Birinin name=value sözdizimini kullanarak bir tanımlama bilgisinin üzerine yazılabileceğini biliyorum, ancak bu sözdizimi yetkilendirme başlığına uygulanmaz.

Yeni bir kullanıcı oturum açtığında eski yetkilendirme başlığından kurtulmanın bir yolu var mı?

Herhangi bir yardım için teşekkür ederiz. Teşekkürler, JeHo

+0

Sunucu tarafında herhangi bir kodu değiştirir misiniz? Hangi dili kullanıyorsunuz (PHP, python, vb.)? – bpedro

+0

Sunucu tarafı, kendinden kaynaklı (WebServiceHost) bir wcf veri hizmeti (C# ile yazılmış) hizmetidir. Bu sunucunun sahibiyim, bu yüzden değişiklik yapabilirim - ama olasılıkların sınırlı olduğundan korkuyorum. – Jeldrik

cevap

11

Görünüşe göre, ilk kullanıcı için de işe yaramadı. Sorun şu ki, yetkilendirme üstbilgisi muhtemelen daha önce tarayıcı tarafından ayarlanmıştı (tarayıcının doğrulama iletişim kutusunu kullandım).

Şu an yaptığım şey, giriş bilgilerini standart bir ad = değer çerezi içinde saklamak ve yetkilendirme başlığını el ile ayarlamaktır.

var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password); 
document.cookie = "Authorization=" + header; 

çerez Oku:

function getAuthCookie() { 
    var cn = "Authorization="; 
    var idx = document.cookie.indexOf(cn) 

    if (idx != -1) { 
     var end = document.cookie.indexOf(";", idx + 1); 
     if (end == -1) end = document.cookie.length; 
     return unescape(document.cookie.substring(idx + cn.length, end)); 
    } else { 
     return ""; 
    } 
} 

Set yetkilendirme başlığını:

çerez Set

$.ajax({ 
     type: "GET", 
     url: "http://someurl", 
     contentType: "application/json; charset=utf-8", 
     beforeSend: function(xhr) { 
      xhr.setRequestHeader("Authorization", getAuthCookie()); 
     }, 
     dataType: "json", 
     success: auth.success, 
     error: auth.error 
    }); 

Bu biraz garip görünüyor ama işe yarıyor.

İlgili konular