无法使用C#从活动目录获取用户属性详细信息

时间:2019-06-04 13:26:58

标签: c# .net active-directory

我正在尝试使用具有完全访问权限以连接到Active Directory的服务帐户凭据连接到Active Directory,但是无法加载用户的属性详细信息。

当我使用“ miminstall”帐户登录时会发生这种情况,该帐户无权从AD提取用户详细信息,但是在我的应用程序中,我已传递了在AD中具有访问权限的帐户凭据。

当我以具有对Active Directory的完全连接访问权限的其他用户(adma)运行Visual Studio时,我可以连接并获取用户详细信息而没有任何问题。

即使在代码中传递了adma帐户凭据,我也不知道为什么会这样。

public string getADattributes(string DN, string operation)
        {        
            string path = "LDAP://xyz.com";

            DirectoryEntry directoryEntry = new DirectoryEntry(path, "xyz\\adma", "abc", AuthenticationTypes.Secure);
            using (directoryEntry)
            {
                DirectorySearcher objDSearcher = new DirectorySearcher();
                objDSearcher.Filter = "(distinguishedName=" + DN + ")";//search user in AD using DN
                objDSearcher.PropertiesToLoad.Add("whenCreated");
                objDSearcher.PropertiesToLoad.Add("whenChanged");
                objDSearcher.PropertiesToLoad.Add("EmployeeID");
                objDSearcher.SearchScope = SearchScope.Subtree;
                SearchResult result = objDSearcher.FindOne();
                if (result != null)//if count!=0 that means user exist in ad
                {
                    string createdDate = "";
                    string modifiedDate = "";
                    string employeeID = "";
                    if (result.Properties["whenCreated"].Count >0)
                    {
                       //able to come inside if statement when running visual studio using adma account but not when runnning with login account i.e., miminstall
                        createdDate = result.Properties["whenCreated"][0].ToString();
                    }
                    if(result.Properties["whenChanged"].Count>0)
                    {
                        modifiedDate = result.Properties["whenChanged"][0].ToString();
                    }
                    if(result.Properties["EmployeeID"].Count > 0)
                    {
                        employeeID = result.Properties["EmployeeID"][0].ToString();
                    }


                }
                return null;
            }
}

1 个答案:

答案 0 :(得分:0)

除非这是一次性任务,否则通常会在任务计划程序或IIS下的Web应用程序中创建任务。

如果这是一个控制台应用程序,则在“任务计划程序”下添加一个新任务,设置操作以运行您的应用程序(将其路径指定为您应用程序的exe),并将任务用户设置为“ adma”

如果它是Web应用程序的一部分,请在IIS中创建一个新的应用程序池。然后右键单击新创建的应用程序池,转到“高级设置”>“身份”,并提供“ adma”的凭据。然后将此应用程序池分配给您的Web应用程序。

如果这不是预定任务或Web应用程序,并且偶尔会按需运行,那么我认为添加“模拟”将是您的最佳选择。看到这个SO