c# - 在没有用户名和密码的情况下使用 ASP.NET 获取 Active Directory 信息

标签 c# asp.net active-directory ldap

我正在尝试从 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/

相关文章:

c# - WPF 选项卡控件防止选项卡更改

asp.net - MathJax - 文件加载失败 :/extensions/MathZoom. js

node.js - 服务器端 NodeJS - 需要客户端 Windows ID

c# - 从 Active Directory 中读取已删除的用户

azure - 无法从 azure AD 应用 list 分配角色

C# SqlConnection 停止于方法 : Open()

c# - 在.Net 6 Web Api中如何将Json数据传递给NotFound()

c# - 使用列表的 ArgumentNullException

asp.net - 如何使安全 token 在被动 STS 设置中自动过期?

c# - 单声道 : Could not load file or assembly 'System.Web.Entity' or one of its dependencies 上的 MVC 5