У меня есть настройка IdentityServer для подключения к внешнему серверу ADFS. Я могу войти в систему и получить токен доступа через OAuth2 / OpenId Connect. As pNet .Core WebApi работает в пуле приложений IIS с пользователем, у которого включено делегирование Kerberos (должен иметь, не знаю, как это проверить, поскольку я не в инфраструктуре).
Чего я хочу достичь состоит в том, что ClaimsIdentity, который я получаю от IdentityServer в WebApi, преобразуется обратно в WindowsIdentity с использованием олицетворения без пароля. Достаточно просто имени пользователя. С фактическим олицетворением WindowsIdentity я должен затем войти в базу данных и внести некоторые изменения.
Я не уверен, возможно ли это вообще, но я уже довольно давно борюсь с этим.
Я взял это как основу для реализации олицетворения. Единственная проблема, с которой я столкнулся, заключается в том, что Context.User.Identity
возвращает не WindowsIdentity
, а ClaimsIdentity
.
Другой подход, который я пробовал, - это использование var user = new WindowsIdentity(username);
, где имя пользователя будет UPN. Это создает личность с ImpersonationLevel.Identity
вместо ImpersonationLevel.Impersonated
. Когда я запускаю WindowsIdentity.RunImpersonated()
с этим токеном доступа пользователей, при загрузке необходимых сборок будет выдан отказ в доступе или исключение IOException.
Итак, первый вопрос: как мне проверить, имеет ли пользователь IIS AppPool правильные права делегирования Kerberos ?
Второй вопрос: можно ли вообще выдать себя за пользователя только с логином?