Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Active Directory获取用户详细信息时发生ASP.NET错误_C#_Asp.net_Visual Studio 2010_Active Directory - Fatal编程技术网

C# 从Active Directory获取用户详细信息时发生ASP.NET错误

C# 从Active Directory获取用户详细信息时发生ASP.NET错误,c#,asp.net,visual-studio-2010,active-directory,C#,Asp.net,Visual Studio 2010,Active Directory,我正试图建立一个网站注册部分(内部到我的部门)。现在,为了注册新用户,我构建了一个表单,用户在其中输入其员工id,即广告帐户名,然后单击按钮获取其详细信息。这些数据随后保存在注册请求排队的数据库中。一旦管理员批准了这些请求,那么只有这些用户才能使用该应用程序。现在的问题是用户未登录,所以未登录的用户是否可以从AD服务器获取详细信息。如果是,那怎么办。?因为当我尝试下面列出的代码时,我使用FindOne函数得到了错误的用户名或密码错误 public string getProperties(str

我正试图建立一个网站注册部分(内部到我的部门)。现在,为了注册新用户,我构建了一个表单,用户在其中输入其员工id,即广告帐户名,然后单击按钮获取其详细信息。这些数据随后保存在注册请求排队的数据库中。一旦管理员批准了这些请求,那么只有这些用户才能使用该应用程序。现在的问题是用户未登录,所以未登录的用户是否可以从AD服务器获取详细信息。如果是,那怎么办。?因为当我尝试下面列出的代码时,我使用FindOne函数得到了错误的用户名或密码错误

public string getProperties(string StaffCode, string property)
        {
            try
            {
                string result = "";
                using (var de = new DirectoryEntry(_path))
                using (var ds = new DirectorySearcher(de))
                {
                    ds.Filter = string.Format("(sAMAccountName={0})", StaffCode);
                    ds.PropertiesToLoad.AddRange(new[] {
            "sn",  // last name
            "givenName",  // first name
            "mail",  // email
            "telephoneNumber",  // phone number
            // etc - add other properties you need
            });
                    var res = ds.FindOne();
                    if (res == null)
                    {
                        result = "noUserFound";
                    }
                    else
                    {
                        foreach (string propName in res.Properties.PropertyNames)
                        {
                            ResultPropertyValueCollection valueCollection = res.Properties[propName];
                            foreach (Object propertyValue in valueCollection)
                            {
                                if (propName == property)
                                {
                                    result = propertyValue.ToString();
                                }

                            }
                        }
                    }

                }
                return result;
            }
            catch (Exception ex)
            {
                return "someErrorOccurred";
            }
请帮助我克服这个问题


提前感谢

我猜运行此代码的应用程序池的标识没有足够的权限在没有身份验证的情况下查询广告

具体来说,从替换此构造函数开始

using ( var de = new DirectoryEntry( _path ) )
使用一个以显式方式获取管理员用户名/密码的

using ( var de = new DirectoryEntry( _path, username, password ) )
并确保用户名有足够的权限查询目录

如果这样做有效,您可以尝试返回原始版本,但必须确保asp.net应用程序池的标识具有足够的权限来查询AD,并且asp.net服务器是域的一部分(如果不是,不以明确的方式提供用户名/密码的身份验证很可能不起作用)