2011-07-05 10 views
5

My giriş kodu: Darin Dimitrov içinIsAuthenticated tarayıcıda çalışır - ancak Air client ile değil! Kimlik doğrulama sonrasında

var authTicket = new FormsAuthenticationTicket(
       1, 
       userName, 
       DateTime.Now, 
       DateTime.Now.AddMinutes(20), // expiry 
       false, 
       roles, 
       "/"); 
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket)); 
Response.Cookies.Add(cookie); 

ve teşekkürler, özel bir özellik yetkilendirme vardır: Bir tarayıcı oturumunda Çalışırken Bu, tüm güzel çalışıyor

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)] 
public class TJAuthorize : AuthorizeAttribute { 
    public override void OnAuthorization(AuthorizationContext filterContext) { 
     string cookieName = FormsAuthentication.FormsCookieName; 

     if (!filterContext.HttpContext.User.Identity.IsAuthenticated || 
       filterContext.HttpContext.Request.Cookies == null || filterContext.HttpContext.Request.Cookies[cookieName] == null) { 
        HandleUnauthorizedRequest(filterContext); 
      return; 
     } 

     var authCookie = filterContext.HttpContext.Request.Cookies[cookieName]; 
     var authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
     string[] roles = authTicket.UserData.Split(','); 

     var userIdentity = new GenericIdentity(authTicket.Name); 
     var userPrincipal = new GenericPrincipal(userIdentity, roles); 

     filterContext.HttpContext.User = userPrincipal; 
     base.OnAuthorization(filterContext); 
    } 

. Ama şimdi bir Flash/Adobe Air istemcisi ile çalışıyorum ve kimlik doğrulama özelliği bir hataya neden oluyor. koduna ayıklama ifadeleri koyarak, bunu söyleyebilirim:

filterContext.HttpContext.User.Identity.IsAuthenticated 

yanlıştır - hatta başarılı bir girişten sonra!

Neden Bir tarayıcı istemcisi ve Hava istemcisi arasında herhangi bir fark olmalı? Ve bunu nasıl düzeltirim?

DÜZENLEME: Başka bir ipucu: Biraz daha ayıklama tablolara koyduktan sonra, ben filterContext.HttpContext.User.Identity doğru Air arama yaparken ayarlı değil bulduk - Name mülkiyet dışarı boş geliyor! Oturum Kimliği doğru, çerez kimliği doğru - ancak User.Identity ayarlanmamış. Bunun neden olabileceği hakkında bir fikrin var mı?

cevap

4

Belki de HttpCookieMode (http://msdn.microsoft.com/en-us/library/system.web.httpcookiemode.aspx) yanlış değere ayarlanmış mı?

Standart sen UseCookies zorlamak ne olur ... UseDeviceProfile mı?

+0

Amazing - "" ''etiketine' cookieless = "UseCookies" 'ekledim ve şimdi çalışıyor! Sen dahi, sen! :) –

+0

Yay! Teşekkürler G-d! ... ekip çalışmasıydı, harika bir çalışma Shaul! Doğru yönde düşünmemize yardımcı olduğu için teşekkürler @vnuk! – davidkomer

2

Bu bir longshot, ama IsAuthenticated müşterinin ASPXAUTH çerezine bağlıdır (veya id ad verdiyseniz) isteği ile gönderiliyor. Flaş/havanın bu çerezi gönderdiğinden emin olun (wireshark veya başka bir ağ aracıyla)

+0

Evet, iyi düşünce, ama ASPXAUTH çerez gönderiyorum, kimlik doğrulama sonra iade edilen ne ... –

+0

hava isteği farklı bir şey olmalı olarak aynı olduğunu kontrol ettirin. Her iki isteği de wireshark ile yakalayın ve karşılaştırın. – Vnuk

+0

Bence Charles kullanıyorsanız ve Çerezler hiçbir farklılıklar vardır ... Bu konuda Shaul ile çalışıyorum – davidkomer

0

HttpContext.User.Identity, global.asax uygulamasında Application_AuthorizeRequest'te görünüyor mu?

+0

Başka herhangi bir yerde aynı davranış - tarayıcıdan çağrıldığında, evet ; Havadan arandığında, hayır. –

İlgili konular