使用ASP.NET获取Active Directory信息,无需用户名和密码

qod*_*ods 5 c# asp.net ldap active-directory

我试图从ASP.NET Web应用程序获取用户在本地网络上的Active Directory信息.Web应用程序正在IIS本地网络上运行.

我想要的:当用户登录网站时,他们可以从Active Directory中看到他们的姓名,用户名,电子邮件和图片.问题是,当他们进入他们的网站时,Web应用程序要求输入用户名和密码.用户在打开PC时已经输入了用户名和密码.所以他们不应该再这样做了.

用户使用其用户名和密码登录PC.我可以获得域名和用户名:

string adInfo = Request.ServerVariables["LOGON_USER"];
Run Code Online (Sandbox Code Playgroud)

此外,我可以在测试时在我的本地PC上获取Active Directory信息System.DirectoryServices,但是当其他用户在本地尝试此Web应用程序时,会出现用户名和密码对话框.

如何才能使用户无需输入用户名和密码即可进入其网站?

我在这里尝试了所有样品,但我找不到任何解决方案.我想我错过了一些重要的事情.

avs*_*099 13

您需要为您的网站使用Windows身份验证模式.

<system.web>
    <authentication mode="Windows" />
    <authorization>
        <deny users="?" /> <!-- disable anonymous authentication -->
    </authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)

...然后在当前用户的上下文下使用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());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这假定当前用户具有对活动目录的读访问权限,并非所有安装都允许此操作,您可能必须考虑使用域管理组或类似服务帐户运行您的应用程序池以提供访问权限.出于明显的安全原因,需要谨慎地完成这项工作 (2认同)