我正在尝试从 ASP.NET Web 应用程序获取本地网络上用户的 Active Directory 信息。 Web 应用程序运行在IIS
在本地网络上。
我想要的:当用户登录网站时,他们可以从 Active Directory 中看到自己的名字、姓氏、用户名、电子邮件和图片。问题是,当他们进入网站时,网络应用程序会要求输入用户名和密码。用户在打开电脑时已经输入了用户名和密码。所以他们不需要再做一次。
用户使用用户名和密码登录电脑。
我可以通过以下方式获取域名和用户名:
string adInfo = Request.ServerVariables["LOGON_USER"];
此外,我还可以在测试时在调试时获取本地 PC 上的 Active Directory 信息System.DirectoryServices
,但是当其他用户在本地尝试此 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());
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)