【问题标题】:LDAP search fails on server, not in Visual StudioLDAP 搜索在服务器上失败,而不是在 Visual Studio 中
【发布时间】:2017-08-09 12:04:59
【问题描述】:

我正在创建一个服务来搜索 LDAP 中的用户。这应该相当简单,可能做了一千次,但我似乎无法正确突破。我以为我拥有它,但后来我将它部署到 IIS,一切都崩溃了。

以下设置为环境变量:

  • ldapController
  • ldapPort
  • adminUsername ???? 肯定是与错误报告不同的用户
  • adminPassword
  • baseDn

并通过我的 Startup.Configure 方法读入。

编辑我知道它们可用于 IIS,因为我在 REST 端点中返回了它们。

这是我的代码:

  // Connect to LDAP 
  LdapConnection conn = new LdapConnection(); 
  conn.Connect(ldapController, ldapPort);
  conn.Bind(adminUsername, adminPassword); 

  // Run search
  LdapSearchResults lsc = conn.Search(
    baseDn,
    LdapConnection.SCOPE_SUB,
    lFilter,
    new string[] { /* lots of attributes to fetch */ },
    false
  ); 

  // List out entries 
  var entries = new List<UserDto>();
  while (lsc.hasMore() && entries.Count < 10) {
    LdapEntry ent = lsc.next(); // <--- THIS FAILS!
    // ... 
  }
  return entries; 

正如我所说,在 Visual Studio 中进行调试时,一切正常。部署到 IIS 时,错误是;

用户“DOMAIN\IIS_SERVER$”登录失败

为什么? adminUsername中指定的用户应该是用来登录的用户(通过conn.Bind(adminUsername, adminPassword);),对吧?那么,为什么它会爆炸说是 IIS 用户是进行登录的用户呢?

编辑我正在使用 Novell.Directory.Ldap.NETStandard

EDIT 上面错误中指定的“用户”实际上根本不是用户。它是运行 IIS 的计算机的 AD 注册名称...如果这有什么不同的话。

UPDATE 与同事协商后,我在IIS上建立了一个新的应用程序池,并尝试以指定用户而不是默认的passthrough来运行应用程序。无论我设置哪个用户,都完全相同的错误消息。

【问题讨论】:

  • The following is setup as environment variables: IIS 用户可以读取那些环境变量吗?
  • 制作一个只呈现环境变量的网页。
  • 绝对肯定 IIS 可以读取我的环境变量@mjwills。更新的问题。

标签: c# visual-studio iis ldap .net-core


【解决方案1】:

尝试通过允许您指定域的网络凭据:

var networkCredential = new NetworkCredential(userName, password, domain);
conn.Bind(networkCredential);

如果这不起作用,请在调用绑定之前指定基本身份验证类型(不确定是否为默认值)。

conn.AuthType = AuthType.Basic;

【讨论】:

  • Novell.Directory.Ldap.LdapConnection 似乎不包含接收NetworkCredential 类型参数的重载。 Novell.Directory.Ldap.LdapConnection 也没有名为 AuthType 的属性。 :-(
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 2020-06-28
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多