У меня есть код в общей библиотеке, которая выполняет проверку авторизации следующим образом
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
new PrincipalPermission(null, "AD_GROUP_NAME").Demand();
У меня возникают некоторые проблемы, когда он вызывается из сторонней структуры планирования заданий.Проверка не пройдена.Я пытался выяснить, почему.Когда я проверяю значение WindowsIdentity.GetCurrent().Name
, это один пользователь (UserA), а когда я проверяю Thread.CurrentPrincipal.Identity.Name
, это другой пользователь (UserB).Оба пользователя должны иметь правильный доступ, поэтому он не должен выходить из строя.Я подозреваю, что он проверяет что-то, кроме этих двух.
Я сделал небольшую тестовую программу, которая только проверяет.Я использовал команду Runas
, чтобы запустить ее как с UserA, так и с UserB, и оба проходили проверку, когда я делаю это таким образом.
Обновление: я почти уверен, что проверка сделана против Thread.CurrentPrincipal
(то есть. UserB).Когда я отлаживаю, я вижу, что принципал является ClaimsPrincipal, а не WindowsPrincipal.Я предполагаю, что вызов SetPrincipalPolicy
не имеет эффекта.Документация, кажется, намекает, что вызов должен быть выполнен, потому что поток создан, и это не так.Сторонний фреймворк устанавливает поток прежде, чем он достигнет моего кода.