WindowsIdentity.Impersonate в ASP.NET случайно "Invalid token for impersonation - it cannot be duplicated"

У меня есть приложение ASP.NET, которое требует от пользователей входа в систему с учетными записями домена с помощью базовой аутентификации. Пользователь может сделать выбор, затем нажать кнопку.

В какой-то момент после нажатия кнопки появляется вот такой код: WindowsIdentity.Impersonate(userIdentity.Token). userIdentity имеет тип WindowsIdentity, и ранее он был установлен в (WindowsIdentity)User.Identity.

userIdentity хранится как переменная сессии, и я думаю, это потому, что после нажатия кнопки страница, содержащая этот код, вызывается через AJAX.

Когда я ввожу этот код, он работает примерно в 2/3 случаев, но в 1/3 случаев я получаю следующее исключение: Invalid token for impersonation - он не может быть продублирован. Я думаю, что больше всего я думаю о том, почему это работает иногда, но не работает в другое время? В некоторых сеансах он срабатывает несколько раз, прежде чем произойдет сбой. На других - сразу же сбой.

Вот трассировка стека:

at System.Security.Principal.WindowsIdentity.CreateFromToken(IntPtr userToken)

at System.Security.Principal.WindowsIdentity..ctor(IntPtr userToken, String authType, Int32 isAuthenticated)

at System. Security.Principal.WindowsIdentity.Impersonate(IntPtr userToken)

at Resource_Booker.BLL.ReservationAgent.SubmitReservationRequest(Reservation reservation, Patron patron) in C:\dev\RoomRes\Resource Booker\BLL\ReservationAgent. cs:line 101

at Resource_Booker.Reserve.reserve_Click(Object sender, EventArgs e) in C:\dev\RoomRes\Resource Booker\Reserve.aspx.cs:line 474

at System.EventHandler.Invoke(Object sender, EventArgs e)

at System. Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)

at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Вот сбивающий с толку фактор: Я не могу воспроизвести эту проблему на моей локальной рабочей станции Windows 7 x64 - хотя моя аутентификация здесь передается неявно, поскольку я использую localhost - или в среде Windows 2003 32-bit IIS 6.0. Это происходит только на довольно ванильной среде Windows 2008 R2. Все эти среды являются членами домена.

7
задан Aren Cambre 30 January 2012 в 22:48
поделиться