Tengo una aplicación ASP.NET que requiere que los usuarios inicien sesión con sus cuentas de dominio mediante la Autenticación básica. El usuario puede hacer una selección, luego presionar un botón.WindowsIdentity.Impersonate en ASP.NET aleatoriamente "Token no válido para la suplantación: no se puede duplicar"
En algún momento después de presionar el botón se encuentra este código: WindowsIdentity.Impersonate(userIdentity.Token)
. userIdentity es del tipo WindowsIdentity, y se estableció previamente en (WindowsIdentity) User.Identity.
UserIdentity se almacena como una variable de sesión, y yo creo que es porque, después de pulsar el botón, la página que contiene el código se llama a través de AJAX.
Cuando pulso este código, funciona aproximadamente 2/3 del tiempo, pero 1/3 del tiempo, obtengo esta excepción: Token no válido para la suplantación: no se puede duplicar. Creo que el rascador de cabeza más grande para mí es ¿por qué funciona a veces pero no en otros? En algunas sesiones, funciona varias veces antes de fallar. En otros, falla de inmediato.
Aquí está el seguimiento de la pila:
en System.Security.Principal.WindowsIdentity.CreateFromToken (IntPtr UserToken)
en System.Security.Principal.WindowsIdentity..ctor (IntPtr UserToken, Cadena authType , Int32 isAuthenticated)
en System.Security.Principal.WindowsIdentity.Impersonate (IntPtr UserToken)
en Resource_Booker.BLL.ReservationAgent.Submit ReservationRequest (reserva de reserva, usuario del patrón) en C: \ dev \ RoomRes \ Resource Booker \ BLL \ ReservationAgent.cs: línea 101
en Resource_Booker.Reserve.reserve_Click (Object sender, EventArgs e) en C: \ dev \ RoomRes \ Resource Booker \ Reserve.aspx.cs: línea 474
en System.EventHandler.Invoke (Object sender, EventArgs e)
en System.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument)
en System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Aquí es un factor de confusión: No puedo reproducir este problema en mi estación de trabajo de Windows 7 x64 locales - aunque mi autenticación se pasa implícitamente aquí desde que estoy usando localhost - o en un Windows 2003 de 32 bits de IIS 6.0 entorno . Solo ocurre en un entorno muy simple de Windows 2008 R2. Todos estos entornos son miembros del dominio.
Este problema me daría miedo porque parece que un identificador no válido fue utilizado internamente por .NET Framework. Esto es potencialmente crítico para la seguridad. – usr