2 回答
长话短说,这是一个安全问题。只要不是通过 SSL 建立与 AD-LDS 的连接,处理密码的一切都会令人头疼。
在找到最初问题的解决方案(见下文)后,我得出结论,使用证书安装 AD-LDS 比尝试解决没有 SSL 的配置所产生的所有问题(甚至开发中)。因此,我建议所有想要使用 AD-LDS 的人,做额外的安装开发证书的工作。这样做的复杂性远低于解决没有 SSL 出现的所有问题的复杂性。经过一番谷歌搜索,我能够使用 windows sdk 的 makecert-programm 创建和安装必要的证书。
对于那些对解决方案感兴趣的人:
在阅读了很多关于 AD-LDS 及其身份验证方式的信息后,我的理解是,使用没有 SSL 的 UserPrincipal 类设置密码是不可能的。作为一种解决方法,DirectoryEntry-class 可用于通过 LDAP 调用 SetPassword-methdod。但是它需要一些参数化:
const long ADS_OPTION_PASSWORD_PORTNUMBER = 6;
const long ADS_OPTION_PASSWORD_METHOD = 7;
const int ADS_PASSWORD_ENCODE_CLEAR = 1;
directoryEntry.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_PORTNUMBER, intPort });
directoryEntry.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_METHOD, ADS_PASSWORD_ENCODE_CLEAR});
directoryEntry.Invoke("SetPassword", new object[] { "MyPassword" });
此外,必须通过 dsmgmt-命令行工具允许取消保存密码通信。
对正在发生的事情的理解,我从这本书的在线预览中得到. 虽然它很旧,但这本书包含了关于 AD LDS (ADAM) 的非常好的解释,这些解释至今仍然适用。
有一种设置密码的方法,但您需要更改 ADLDS 设置以允许在不安全的通道上设置密码。
cmd\
dsmgmt\
ds behavior\
connections\
connect to server localhost:389\
quit\
allow passwd op on unsecured connection\
quit\
quit