c# - 使用 LdapConnection 连接到 AD/LDS 的凭据无效
问题描述
我的机器上运行了一个 AD/LDS 实例,我正在尝试使用 System.DirectoryServices.Protocols.LdapConnection 类连接到它。出于某种原因,每次我调用 Bind() 方法时,它都会抛出一个 LdapException 抱怨无效的凭据。
这是我用来设置连接的代码:
var ldapDirectoryIdentifier = new LdapDirectoryIdentifier(config.Server.Host, config.Server.Port);
var creds = new NetworkCredential(config.Credentials.Username, config.Credentials.Password)
{
Domain = config.Credentials.
};
ldapConnection = new LdapConnection(ldapDirectoryIdentifier, creds, AuthType.Basic);
if (config.Server.Secure)
{
cert = new X509Certificate(config.Server.Certificate);
ldapConnection.SessionOptions.SecureSocketLayer = true;
ldapConnection.SessionOptions.VerifyServerCertificate = CheckCertificate;
}
ldapConnection.SessionOptions.ProtocolVersion = 3;
try
{
ldapConnection.Bind();
}
catch (LdapException e)
{
Log.LogException(e);
Environment.Exit(e.ErrorCode);
}
配置来自 App.config 文件,如下例所示:
<server host="host" port="389"/>
<credentials username="username" password="password" domain="domain"/>
<usersearch base="ou=test,dc=test,dc=com" filter="(middlename=user)" objectclass="inetorgperson"/>
<devicesearch base="ou=test,dc=test,dc=com" filter="(sn=device)" objectclass="inetorgperson"/>
我尝试修改凭据部分以使其连接;设置username="DOMAIN\user"
,有和没有凭据的域条目。我试过弄乱连接字符串,例如<server host="LDAP://host[:389]"/>
. 它只是说我用来通过 ADSI Edit 和 ldp 连接到实例的凭据无效。
我可以使用相同的域凭据(本地用户帐户)连接,System.DirectoryServices.DirectoryEntry
所以我怀疑它是 AD/LDS 的 AD 位很挑剔。
有人有什么想法吗?
解决方案
它可能在会话选项上。尝试强制认证类型:
ldapConnection.AuthType = AuthType.Negotiate;
这也可能是您处理证书的方式。尝试以这种方式添加它:
ldapConnection.ClientCertificates.Add(cert);
推荐阅读
- r - mlogit :在 R 中使用不同的 mlogit 替代方案
- python - 带有新 m1 芯片的 MacOS 上的 pip 安装问题
- javascript - 虫洞中的下拉列表
- javascript - Gatsby (gatsby-source-strapi) - 您的数据问题中存在冲突的字段类型
- d3.js - D3plus 线图上的多个形状注释
- reactjs - 使用 React Native 的增强现实应用程序
- java - 无法调用“org.apache.poi.ss.usermodel.Cell.setCellValue(String)”,因为现有 XLSM 文件的“cell”为空
- r - 对 R 相当陌生,谁能告诉我查询之间的区别?
- ios - 如何快速自动移动/自动调整笔记应用程序的保存按钮?
- snowflake-cloud-data-platform - 选择具有特定字符雪花的所有列