В чем разница между получением WindowsPrincipal из WindowsIdentity и Thread.CurrentPrincipal?

Я пытаюсь выяснить, почему безопасность на основе атрибутов не работает t работает так, как я ожидал, в WCF, и я подозреваю, что это может быть связано со следующим:

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")]

Помощь приветствуется.

15
задан Kofi Sarfo 30 December 2010 в 14:36
поделиться