gpt4 book ai didi

C# Active Directory PrincipalContext/UserPrincipal.IsMemberOf 错误

转载 作者:太空狗 更新时间:2023-10-29 19:57:24 28 4
gpt4 key购买 nike

所以我有一个问题,老实说我不太确定如何提出。本质上,当我运行它时,我有一些代码在我的本地机器上运行得非常好。一旦我将它发布到我们的开发 Web 服务器,它就会失败。我不确定这是 IIS 设置问题、web.config 问题还是编码问题。

这是代码片段

    bool isMember = false;

PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID);

if (user.IsMemberOf(ADDomain, IdentityType.Name, groupName.Trim()))
{
isMember = true;
}

return isMember;

我在其中传递用户名和组,它会告诉我该用户是否是该组的成员。没问题。在我的机器上运行良好。我去将该代码发布到网络服务器,但当它到达该行时它失败了

UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID); 

它抛出这个错误:

[DirectoryServicesCOMException (0x80072020): An operations error occurred.]
System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +788
System.DirectoryServices.DirectoryEntry.Bind() +44
System.DirectoryServices.DirectoryEntry.get_AdsObject() +42
System.DirectoryServices.PropertyValueCollection.PopulateList() +29
System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) +63
System.DirectoryServices.PropertyCollection.get_Item(String propertyName) +163 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() +521217
System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() +51
System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() +141
System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() +42
System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate) +29
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, String identityValue) +95
Cosmic.Web.Login.btnSubmit_Click(Object sender, EventArgs e) in C:\cosmic\Cosmic.Web\Login.aspx.cs:79
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +154
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3691

有什么地方可能会失败吗?

最佳答案

我的第一个猜测是:您在其下运行此代码的用户帐户没有查询 Active Directory 的必要权限。

要解决这个问题,基本上你需要改变你的构造函数:

PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain);

(使用运行此代码的当前默认凭据建立与 AD 的连接)

为此:

PrincipalContext ADDomain = 
new PrincipalContext(ContextType.Domain, "DOMAIN", useraccount, password);

并为您知道有足够权限查询 Active Directory 的用户帐户提供用户名和密码。

关于C# Active Directory PrincipalContext/UserPrincipal.IsMemberOf 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8716347/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com