【发布时间】:2011-09-28 23:50:03
【问题描述】:
我的登录码,认证后:
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,我有一个自定义的 Authorize 属性:
[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 客户端有什么区别?我该如何解决这个问题?
编辑: 另一个线索:在添加更多调试语句后,我发现从 Air 进行调用时 filterContext.HttpContext.User.Identity 设置不正确 - Name 属性显示为空白!会话 ID 正确,cookie ID 正确 - 但未设置 User.Identity。任何想法为什么会发生这种情况?
【问题讨论】:
标签: asp.net asp.net-mvc air