在WCF服务背后的代码中使用PrincipalContext。 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.ServiceSecurityContextThread.CurrentPrincipal.Identity均显示模拟工作正常。而且,就像我说的那样,S.DS.P中的其他AD任务也可以正常工作。

如果我在PrincipalContext上明确设置了凭据,则一切正常。例如:

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


现在一切正常。但是我不知道呼叫者的用户名和密码。我必须依靠模仿。

有什么想法会导致我看到此问题?

提前致谢!
詹姆士

最佳答案

确保为应用程序池设置了spn,在AD中设置了委派,并且确保应用程序池帐户具有os特权的角色。

10-02 01:37