WindowsIdentity.Impersonate в ASP.NET случайным образом «Недопустимый токен для олицетворения - его нельзя дублировать» - PullRequest
0 голосов
/ 24 мая 2019

У меня есть веб-приложение с интерфейсом HTML 5, которое вызывает (через Ajax и JSON) веб-приложение .NET MVC.Цель состоит в том, чтобы позволить пользователям домена автоматически проходить проверку подлинности в Active Directory и выдавать себя за пользователя, чтобы при доступе IIS к сетевым ресурсам в контексте этого пользователя.Код, который я сейчас использую, основан на следующем: Олицетворение с использованием проверки подлинности с помощью форм .Тем не менее, я часто получаю «Неверный токен для олицетворения - его нельзя дублировать».

Иерархия веб-сайта:

Default Web Server
  \-Links_Test     <- This contains the HTML, JavaScript and CSS 
      \-data       <- This is where the C# code runs

Я пытался включить олицетворение ASP.NET ви корневой уровень (Links_Test), и узел, который содержит код MVC (Links_Test> Данные), и все, что происходит, - это то, что браузер выполняет (казалось бы) бесконечный цикл, запрашивая имя пользователя / пароль.Я смотрел на переполнение стека и пробовал поискать в Google, но результаты не относятся к устаревшим ресурсам и не указывают на них.

Другая важная информация:

  • Разработка сайта в Windows 10 Pro с IIS 10
  • Использование .NET 4.7.2
  • Аутентификация пользователей в Active Directory

Моя цель - перенести этот сайт на надлежащий сервер и сделать так, чтобы IIS выдавал себя за пользователячто любые действия выполняются в контексте пользователя.

ОБНОВЛЕНИЕ

Это сообщение об ошибке, которое я получаю:

Invalid token for impersonation - it cannot be duplicated.

at System.Security.Principal.WindowsIdentity.CreateFromToken(IntPtr userToken)
at System.Security.Principal.WindowsIdentity..ctor(SerializationInfo info)
at System.Security.Principal.WindowsIdentity..ctor(SerializationInfo info, StreamingContext context)
at Void .ctor(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)(Object[] )
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateISerializable(JsonReader reader, JsonISerializableContract contract, JsonProperty member, String id)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at TFS.Key2.API.Data_Encryption.EncryptedBuffer.DecryptData[T]() in C:\Source\repos\TFS.Key2.WebSite\TFS.Key2.API.Types\Data Encryption\EncryptedBuffer.cs:line 48
at TFS.Key2.API.Helpers.HttpCookieHelper.GetEncryptedValue[T](HttpCookie Cookie) in C:\Source\repos\TFS.Key2.WebSite\TFS.Key2.API.Types\Helpers\HttpCookieHelper.cs:line 34
at TFS.Key2.WebSite.WebApiApplication.Application_PreRequestHandlerExecute(Object Sender, EventArgs E) in C:\Source\repos\TFS.Key2.WebSite\TFS.Key2.WebSite\Global.asax.cs:line 130
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...