安装.net 4.5自定义表单身份验证后中断

时间:2013-04-02 11:18:25

标签: asp.net .net forms-authentication

我刚刚从VS2010升级到VS 2012,并且在FormsAuthentication方面遇到了一些问题。

我有一些旧代码可以创建一个自定义身份验证cookie来存储som信息:

   public static int SetAuthCookie<T>(this HttpResponse responseBase, string name, bool rememberMe, T userData)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();

            var cookie = FormsAuthentication.GetAuthCookie(name, rememberMe);
            var ticket = FormsAuthentication.Decrypt(cookie.Value);

            var newTicket = new FormsAuthenticationTicket(ticket.Version,
                                                          ticket.Name,
                                                          ticket.IssueDate,
                                                          ticket.Expiration,
                                                          ticket.IsPersistent,
                                                          serializer.Serialize(userData),
                                                          ticket.CookiePath);

            var encodedTicket = FormsAuthentication.Encrypt(newTicket);

            cookie.Value = encodedTicket;
            responseBase.Cookies.Add(cookie);

            return encodedTicket != null ? encodedTicket.Length : 0;
        }
    }

升级到.Net 4.5后,HttpContext.Current.Request.IsAuthenticated始终为null。我已经看到有一种在.Net 4.5中进行身份验证的新方法,但我宁愿不使用它,因为我无法从.Net 4.0升级生产环境。有没有办法在使用自定义身份验证cookie时设置身份验证?

3 个答案:

答案 0 :(得分:4)

我必须自己在Global.asax中设置当前用户:

    private void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    HttpCookie cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
    if (cookie != null)
    {
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
        HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new FormsIdentity(ticket), new string[0]);
    }
}

为什么在.Net 4.5中这已经发生了变化我不知道。

答案 1 :(得分:1)

听起来你正面临着这些问题之一:

http://social.microsoft.com/Forums/en-US/Offtopic/thread/1791c5e3-4087-4e92-a460-51c5c4221f49

或更简单的配置:

http://forums.asp.net/t/1835788.aspx/1

或者破坏了web.config,如下所示:

http://forums.asp.net/t/1852961.aspx/1

答案 2 :(得分:1)

在.NET 4.5中,machineKey的处理方式不同。您可以在您的配置中添加compatibilityMode =“Framework20SP1”:

(以上是2.0 / 4.0应用程序的默认设置,但不是4.5应用程序的默认设置,因此必须在4.5应用程序中明确设置。)

参考:http://forums.asp.net/t/1835788.aspx/1