我有一个Web API在公司内部网中的Microsoft服务器上运行。客户端在同一个域内。已禁用匿名身份验证,并在服务器上启用了集成Windows身份验证,并在web.config
中启用了身份模拟。
Thread.CurrentPrincipal.Identity
和WindowsIdentity.Current
显示了客户端的身份验证Windows帐户,这意味着据我了解,appPool中的线程代表有权访问Active Directory的特权客户端用户运行。
但是,问题是PrincipalContext
方法仅在将帐户凭据作为参数提供时才返回成功的主体对象。否则,将引发以下异常。
我不是要明确键入凭据。它应该从用户的帐户推断出这显然不会发生。我将非常感谢您的帮助。
var context = new PrincipalContext(ContextType.Domain);
错误:
System.DirectoryServices.DirectoryServicesCOMException
发生操作错误。在System.DirectoryServices.DirectoryEntry.Bind(布尔throwIfFail)
在System.DirectoryServices.DirectoryEntry.Bind()
在System.DirectoryServices.DirectoryEntry.get_AdsObject()
在System.DirectoryServices.PropertyValueCollection.PopulateList()
在System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry条目,字符串propertyName)中
在System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
在System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer()
在System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
在System.DirectoryServices.AccountManagement.PrincipalContext.Initialize
在System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
在System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext上下文,类型PrincipalType,可为空的1identityType,字符串identityValue,DateTime refDate)
在System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext上下文,类型PrincipalType,字符串identityValue)中
在System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext上下文,字符串identityValue)中
在Headcount_Backend.Controllers.ActiveDirectoryController.GetUserAD()“,” RemoteStackTraceString“:空,” RemoteStackIndex“:0,” ExceptionMethod“:” 8 \ nBind \ nSystem.DirectoryServices,版本= 4.0.0.0,文化=中性,PublicKeyToken = b03f5f7f11d50a3a3a \ nSystem.DirectoryServices.DirectoryEntry \ nVoid Bind(Boolean)“,” HResult“:-2147016672,” Source“:” System.DirectoryServices“,” WatsonBuckets“:null}