【问题标题】:ASP.NET error getting user details from Active Directory从 Active Directory 获取用户详细信息的 ASP.NET 错误
【发布时间】:2014-09-16 14:41:57
【问题描述】:

我正在尝试为网站(在我的部门内部)建立一个注册部分。现在为了让新用户注册,我构建了一个表单,用户在其中输入他的员工 ID,即 AD 帐户名称,然后单击一个按钮来获取他的详细信息。稍后将其保存在注册请求排队的数据库中。一旦这些请求被管理员批准,那么只有这些用户可以使用该应用程序。现在的问题是用户未登录,因此未登录用户是否可以从 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";
            }

请帮我解决这个问题。

提前致谢

【问题讨论】:

    标签: c# asp.net visual-studio-2010 active-directory


    【解决方案1】:

    我的猜测是,您运行此代码的应用程序池的身份没有足够的权限来查询未经身份验证的 AD。

    具体来说,先从替换这个构造函数开始

    using ( var de = new DirectoryEntry( _path ) )
    

    以明确的方式获取管理员的用户名/密码

    using ( var de = new DirectoryEntry( _path, username, password ) )
    

    并确保用户名有足够的权限来查询目录。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多