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