验证后我的登录代码:
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.任何想法为什么会这样?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。