प्रमाणीकरण के बाद मेरा प्रवेश कोड,:ब्राउज़र पर प्रमाणीकृत काम है - लेकिन एयर क्लाइंट के साथ नहीं!
[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);
}
यह सब खूबसूरती से काम करता है जब मैं एक ब्राउज़र सत्र में काम कर रहा हूँ:
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);
और, Darin Dimitrov करने के लिए धन्यवाद, मैं एक कस्टम विशेषता को अधिकृत किया है। लेकिन अब मैं एक फ्लैश/एडोब एयर क्लाइंट के साथ काम कर रहा हूं, और प्रमाणीकरण विशेषता विफलता पैदा कर रही है। कोड में डिबग बयान डाल करके, मुझे लगता है कि बता सकते हैं:
filterContext.HttpContext.User.Identity.IsAuthenticated
गलत है - एक सफल प्रवेश के बाद भी!
ब्राउज़र क्लाइंट और एयर क्लाइंट का उपयोग करने के बीच कोई अंतर क्यों होना चाहिए? और मैं इसे कैसे ठीक करूं?
संपादित करें: एक और सुराग: कुछ और डिबग बयान में डालने के बाद, मैं पाया है filterContext.HttpContext.User.Identity
सही ढंग से सेट नहीं है कि जब एयर से कॉल कर - Name
संपत्ति बाहर खाली आता है! सत्र आईडी सही है, कुकी आईडी सही है - लेकिन User.Identity
सेट नहीं है। कोई विचार यह क्यों हो रहा है?
कमाल - मैंने '' टैग को '<प्रमाणीकरण>' में 'cookieless = "UseCookies" 'जोड़ा' और अब यह काम करता है! आप प्रतिभा, आप! :) –
हाँ !! धन्यवाद जी-डी! ... यह एक टीम प्रयास था - महान काम शॉल! हमें सही दिशा में सोचने में मदद करने के लिए धन्यवाद @ vnuk! – davidkomer