ユーザーが基本認証を使用してドメインアカウントでサインインする必要があるASP.NETアプリがあります。ユーザーは選択を行い、ボタンを押すことができます。
ボタンを押した後のある時点で、次のコードが表示されますWindowsIdentity.Impersonate(userIdentity.Token)
。userIdentityのタイプはWindowsIdentityであり、以前は(WindowsIdentity)User.Identityに設定されていました。
userIdentityはセッション変数として保存されます。これは、ボタンが押された後、このコードを含むページがAJAXを介して呼び出されるためだと思います。
このコードをヒットすると、約2/3の確率で機能しますが、1/3の確率で、次の例外が発生します。偽装のトークンが無効です。複製できません。私にとって最大のヘッドスクラッチャーは、なぜそれが時々機能するのに、他の時には機能しないのかということだと思います。一部のセッションでは、失敗する前に数回機能します。他の人では、それはすぐに失敗します。
スタックトレースは次のとおりです。
System.Security.Principal.WindowsIdentity.CreateFromToken(IntPtr userToken)で
System.Security.Principal.WindowsIdentity..ctor(IntPtr userToken、String authType、Int32 isAuthenticated)で
System.Security.Principal.WindowsIdentity.Impersonate(IntPtr userToken)で
C:\ dev \ RoomRes \ Resource Booker \ BLL \ ReservationAgent.cs:line101のResource_Booker.BLL.ReservationAgent.SubmitReservationRequest(予約予約、パトロンパトロン)
C:\ dev \ RoomRes \ Resource Booker \ Reserve.aspx.cs:line 474のResource_Booker.Reserve.reserve_Click(Object sender、EventArgs e)で
System.EventHandler.Invoke(オブジェクト送信者、EventArgs e)で
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)で
System.Web.UI.Page.ProcessRequestMain(ブール値includeStagesBeforeAsyncPoint、ブール値includeStagesAfterAsyncPoint)で
紛らわしい要因は次のとおりです。ローカルホストを使用しているため、認証はここで暗黙的に渡されますが、ローカルのWindows7x64ワークステーションまたはWindows200332ビットIIS6.0環境ではこの問題を再現できません。これは、かなりバニラなWindows2008R2環境でのみ発生します。これらの環境はすべてドメインメンバーです。