Мой логин, после аутентификации:
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);
и, благодаря Дарин Димитров , у меня есть собственный атрибут авторизации:
[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);
}
Все это прекрасно работает, когда я работаю в сеансе браузера. Но сейчас я работаю с клиентом Flash / Adobe Air, и атрибут аутентификации вызывает сбой. Поместив в код операторы отладки, я могу сказать, что:
filterContext.HttpContext.User.Identity.IsAuthenticated
неверно - даже после успешного входа!
Почему должна существовать разница между использованием клиента браузера и клиента Air? И как мне это исправить?
РЕДАКТИРОВАТЬ: Еще одна подсказка: после добавления еще нескольких отладочных операторов, я обнаружил, что filterContext.HttpContext.User.Identity
не правильно установлен при выполнении вызова из воздуха - свойство Name
выходит пустым! Идентификатор сеанса правильный, идентификатор cookie правильный, но User.Identity
не задано. Есть идеи, почему это может происходить?