2

今日、私は奇妙な問題に遭遇しました。私のサイトは .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 のバージョンを更新すると、サイトにどのような影響があるかを誰かに説明してもらえますか?

4

2 に答える 2

0

私のサイトでも同様の問題。認証はIE10のみ失敗しますが、FirefoxとIE8、IE9では正常に動作します。問題を解決するために、web.config にパラメーター cookieless="UseCookies" を追加しました。

<authentication mode="Forms" >
  <forms loginUrl="~/Account/LogOn" timeout="2880" cookieless="UseCookies" />
</authentication>
于 2013-06-13T13:26:08.183 に答える
-3

コードのスペルミスが原因である可能性があります (HttpCookie authCooke)。「authCookie」であるべきですか?

于 2013-03-23T09:32:59.447 に答える