我正在尝试从 ASP.NET Web 应用程序获取用户在本地网络上的 Active Directory 信息。 Web 应用程序正在本地网络的 IIS
上运行。
我想要的:当用户登录该网站时,他们可以从 Active Directory 中看到他们的名字、姓氏、用户名、电子邮件和图片。问题是,当他们进入他们的网站时,网络应用程序要求输入用户名和密码。用户在打开 PC 时已经输入了用户名和密码。所以他们不需要再做一次。
用户使用用户名和密码登录 PC。 我可以通过以下方式获取域和用户名:
string adInfo = Request.ServerVariables["LOGON_USER"];
此外,在测试 System.DirectoryServices
时,我可以在调试时获取本地 PC 上的 Active Directory 信息,但是当其他用户在本地尝试此 Web 应用程序时,会出现用户名和密码对话框。
我怎样才能让用户无需输入用户名和密码就可以进入他们的网站?
我在这里尝试了所有示例,但找不到任何解决方案。我想我错过了一些重要的事情。
最佳答案
您需要为您的网站使用 Windows 身份验证模式。
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" /> <!-- disable anonymous authentication -->
</authorization>
</system.web>
...然后在当前用户的上下文中使用 LDAP 查询来获取有关用户的扩展信息:
using System.DirectoryServices;
using (var de = new DirectoryEntry("LDAP://DC=MYDOMAIN,DC=COM"))
using (var ds = new DirectorySearcher(de))
{
ds.Filter = string.Format("(sAMAccountName={0})", HttpContext.Current.User.Identity.Name);
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();
foreach (string propName in res.Properties.PropertyNames)
{
ResultPropertyValueCollection valueCollection = res.Properties[propName];
foreach (Object propertyValue in valueCollection)
{
Console.WriteLine("Property: " + propName + ": " + propertyValue.ToString());
}
}
}
关于c# - 在没有用户名和密码的情况下使用 ASP.NET 获取 Active Directory 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19841302/