如何查询AD以从lan id获取名称电子邮件

时间:2010-05-13 17:23:04

标签: c# .net active-directory

我在asp.net中有一些代码(由其他人友情提供)来查询AD以获取用户名和电子邮件等。

using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using ActiveDs;

        DirectorySearcher search = new DirectorySearcher(new DirectoryEntry(), string.Format("(samaccountname={0})", id));
        if (search == null)
            return id;
        if (search.FindOne() == null)
            return id;
        DirectoryEntry usr = search.FindOne().GetDirectoryEntry();
        IADsUser oUsr = (IADsUser)usr.NativeObject;
        return string.Format("{0} {1}", usr.Properties["givenname"].Value, usr.Properties["sn"].Value);

然而,这需要假冒一个id,每2周需要更改一次,然后在web.config中更新,这经常被遗忘

是否有任何非模拟代码可以达到相同的效果?

更新 - 它是一个配置工具,它查找名称,电子邮件ID等。 我喜欢服务a / c的想法

问:如何使用“服务”a / c运行(模拟)AD代码?任何样品/代码?

你怎么impersona

3 个答案:

答案 0 :(得分:1)

  1. 出于特定目的,应将ServiceAccount添加到AD;
  2. 如果ASP.NET应用程序适用于组织中的LAN,则可能只是忘记提供用户名和密码而只提供根域。这样,Active Directory将搜索Windows身份验证用户,而不是使用模拟(这假定访问您的应用程序的用户有权执行应用程序提供的任务)。
  3. 您的申请究竟需要做什么?

    如果您的应用程序管理用户帐户,组和OU,则只有在通过应用程序执行这些任务的用户无权使用其常规用户帐户管理AD时,才需要使用模拟。这不应该发生。因此,对于此事件,如果用户具有适当的权限,则省略您的凭据将仅允许AD搜索当前登录的用户。

答案 1 :(得分:0)

我不这么认为,因为您需要使用有效凭据绑定到域才能从活动目录中读取。

将用户名/密码视为数据库连接字符串的一部分。我要求您的域管理员提供一个复杂的用户名和密码,并请求他们为其提供有限的登录权限并将密码设置为永不过期。然后在Web.config文件中存储和使用它们。

答案 2 :(得分:0)

我们通常要求IT向我们提供域名服务帐户。您仍需要模拟,但使用服务帐户时,密码不必每两周更改一次,并且授予您所需的特定功能的特定权限,因此这对您来说意味着非常低的维护。