WCF服务中的System.DirectoryServices.AccountManagement.PrincipalContext和Impersonation
在位于WCF服务后面的代码中使用PrincipalContext
。 WCF服务正在模拟,以允许“传递”类型身份validation。
虽然我使用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
显示模拟正常工作。 并且,就像我说的那样,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权限的一部分的行为。
- ASP.NET – 获取DirectoryEntry / SID的主体/相对标识符(RID)
- 是否有更好(更简单)的方法来获取特定域的SID?
- 如何使用C#获取Active Directory中所有域的列表
- 在开发/测试环境中模拟Active Directory登录
- 从ActiveDirectory检索用户帐户过期
- 在Active Directory中找不到Locked属性(C#)
- UserPrincipal.FindByIdentity中的.NET 4.5错误(System.DirectoryServices.AccountManagement)
- UserPrincipals.GetAuthorizationGroups枚举组时发生错误(1301)。 升级到Server 2012域控制器后
- 使用C#/ Powershell设置Active Directory“安全身份映射”/“名称映射”不会添加到正确的“存储”