ASP.NET Authentification因IE 10而失败

时间:2013-03-21 21:32:59

标签: asp.net .net asp.net-mvc iis internet-explorer-10

今天我遇到了一个奇怪的问题。 我的网站在.NET 4下的应用程序池上运行,今天我们注意到它无法在IE 10下验证用户(其他浏览器一切正常)。这是抛出的异常:

  应用程序中的服务器错误。

     

无法投射类型的对象   输入'System.Security.Principal.GenericIdentity'   'System.Web.Security.FormsIdentity'。描述:未处理   在执行当前Web请求期间发生异常。   请查看堆栈跟踪以获取有关错误的更多信息   它起源于代码。

     

异常详细信息:System.InvalidCastException:无法转换对象   输入'System.Security.Principal.GenericIdentity'类型   'System.Web.Security.FormsIdentity'。

但是在将.NET 4升级到4.5版后,错误已经消失。奇怪的是,我们没有更改应用程序池上的.NET版本,它仍然是.NET 4。

顺便说一下,我正在使用自定义主体,并且我将userData附加到AuthenticationTicket。 这是我在Global.asax中的代码:

protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
    {
        HttpCookie authCooke = Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCooke != null)
        {
            FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCooke.Value);
            if (authTicket != null)
            {
                var identity = new GenericIdentity(authTicket.Name, "Forms");
                var principal = new CustomPrincipal(identity);

                string userData = ((FormsIdentity)(Context.User.Identity)).Ticket.UserData;
                var serializer = new JavaScriptSerializer();
                principal.User = (User)serializer.Deserialize(userData, typeof(User));

                Context.User = principal;
                Thread.CurrentPrincipal = principal;
            }
        }
    }

有人可以向我解释我做错了什么以及如何在不更改应用程序池的情况下更新.NET版本会影响网站吗?

2 个答案:

答案 0 :(得分:0)

我网站上的类似问题。身份验证仅在IE10中失败,但在Firefox和IE8,IE9中运行良好。 为了解决这个问题,我在web.config

中添加了参数cookieless =“UseCookies”
<authentication mode="Forms" >
  <forms loginUrl="~/Account/LogOn" timeout="2880" cookieless="UseCookies" />
</authentication>

答案 1 :(得分:-3)

可能是因为你的代码拼写错误(HttpCookie authCooke)。应该是“authCookie”吗?