Я пытаюсь выяснить, почему безопасность на основе атрибута не работает, как я бы ожидать в WCF, и я подозреваю, что это, возможно, что-то делать со следующим:В чем разница между извлечением WindowsPrincipal из WindowsIdentity и Thread.CurrentPrincipal?
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
var identity = new WindowsIdentity("ksarfo");
var principal = new WindowsPrincipal(identity);
Console.WriteLine("\nChecking whether current user [" + identity.Name + "] is member of [" + groupName + "]");
Console.WriteLine(principal.IsInRole(groupName)); // returns true
principal = (WindowsPrincipal)Thread.CurrentPrincipal;
identity = (WindowsIdentity) principal.Identity;
Console.WriteLine("\nChecking whether current user [" + identity.Name + "] is member of [" + groupName + "]");
Console.WriteLine(principal.IsInRole(groupName)); // returns false
Я не понимаю, почему результаты различаются для вызова функции:
principal.IsInRole(groupName)
для полноты точки, в которой коды фактически не удается здесь:
PrincipalPermission(SecurityAction.Demand, Role = "PortfolioManager")]
Помогите оценить.
Я не очень хорошо знаком с этим классом, но мне интересно, сравнивает ли свойство .Token этих двух тождеств? Является ли локальная системная учетная запись, а другая - сетевой учетной записью ... что-то вроде этого. – Greg
Спасибо, Грег. Токен - это «дескриптор токена доступа, связанного с текущим потоком выполнения» - они различаются. Не уверен, что это значит, кроме того, что у них разные указатели. Каждый раз, когда код запускает токены, они отличаются друг от друга и предыдущим исполнением. Я ожидал этого. Оба возвращают true для свойства IsSystem. Значения для свойства Owner (SID или идентификатор безопасности) также идентичны. Два часа я теряю желание жить. –
Вы работаете в Windows Vista или выше? Интересно, может ли это быть связано с злом UAC; Я думаю, что окна создают поддельный пользователь во время входа в систему, который выглядит в основном, но не совсем так же, как и у существующего пользователя. Вы можете проверить, если это проблема, запустив приложение в качестве администратора и видя, устраняет проблему. – Brian