System.DirectoryServices.AccountManagement.PrincipalContext и Олицетворение в службе WCF - PullRequest
3 голосов
/ 18 августа 2010

Работа с кодом PrincipalContext в коде службы WCF. Служба WCF является олицетворением, чтобы разрешить аутентификацию типа «сквозной».

В то время как все остальное, что я делаю с Active Directory (в основном пространство имен System.DirectoryServices.Protocols), работает нормально в этом сценарии, по некоторым причинам классы в System.DirectoryServices.AccountManagement подходят. Пример кода, который не работает:

PrincipalContext context = new PrincipalContext(ContextType.Domain, domainName);
UserPrincipal user = 
    UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, UserName);

Когда я звоню на FindByIdentity, я получаю COMException: «Произошла ошибка операции». Звонки на номер PrincipalContext также не выполняются, например ::

string server = context.ConnectedServer;

И OperationContext.Current.ServiceSecurityContext, и Thread.CurrentPrincipal.Identity показывают, что олицетворение работает правильно. И, как я уже сказал, другие задачи AD в S.DS.P работают нормально.

Если я явно установлю учетные данные на PrincipalContext, все будет работать. Например:

PrincipalContext context = 
    new PrincipalContext(ContextType.Domain, domainName, user, password);
UserPrincipal user = 
    UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, UserName);

Теперь все работает. Но я не буду знать имя пользователя и пароль от звонящего; Я должен положиться на подражание.

Есть идеи, что может вызвать проблему, с которой я столкнулся?

Заранее спасибо! Джеймс

1 Ответ

1 голос
/ 01 февраля 2011

Убедитесь, что для пула приложений задан spn, в AD установлено делегирование и что учетная запись пула приложений имеет действие как часть привилегии os.

...