我正在尝试创建一个 Intranet 网站,该网站可以根据他们的 Active Directory 用户名查找用户的电子邮件地址。
我的 web.config 中有以下内容:
<authentication mode="Windows"/>
<identity impersonate="true"/>
我可以通过以下方式获取用户用户名:
Environment.UserName
在 localhost 上运行,以下代码允许我查询 AD 并获取电子邮件:
public string GetADUser(string userName)
{
DirectoryEntry entry = new DirectoryEntry();
// get a DirectorySearcher object
DirectorySearcher search = new DirectorySearcher(entry);
// specify the search filter
search.Filter = "(&(objectClass=user)(anr=" + userName + "))";
// specify which property values to return in the search
search.PropertiesToLoad.Add("mail"); // smtp mail address
// perform the search
SearchResult result = search.FindOne();
string email = string.Empty;
if (result != null)
{
if (result.Properties["mail"].Count == 1)
{
email = result.Properties["mail"][0].ToString();
}
else
{
email = "no email";
}
}
else
{
email = "not found";
}
return email;
}
太好了,此代码默认使用我的凭据进行身份验证,并允许我传入用户名并查找用户的电子邮件地址。
但是,当我将此测试代码上传到服务器时,如果我从本地主机以外的任何地方浏览到该站点,代码就会停止工作。
[COMException (0x80072020): An operations error occurred.]
谷歌搜索表明我有权限问题。
为了解决这个问题,我尝试将应用程序池标识设置为我的凭据,但这仍然不允许代码搜索 AD。
网站身份验证在 IIS 中配置如下(启用的项目标记为 <<):
Anonymous Authentication:Disabled
ASP.NET Impersonation:Enabled <<
Basic Authentication:Disabled
Digest Authentication:Disabled
Forms Authentication:Disabled
Windows Authentication:Enabled <<
甚至有可能做我想做的事吗?我错过了什么?