我们正在使用 ADLDS 进行用户管理和身份验证。我们可以毫无问题地成功查询实例。但是,如果未设置密码,尝试执行SetPassword
等操作将失败甚至尝试创建新用户,则会失败。我可以成功更新用户,只要它不是我想要更新的密码。我一直在阅读很多与此相关的不同文章,但没有找到解决方案。发帖,看看我是否可以对这个问题有一些新的看法,感谢任何输入。
示例
ContextType ctxType = ContextType.ApplicationDirectory;
string server = "myadldsserver.com";
string usersCN = "CN=Users,..."; // container where users reside
ContextOptions ctxOpts = ContextOptions.SimpleBind;
string uname = "myuser";
string pswrd = "mypass";
using(var ctx = new PrincipalContext(ctxType, server, usersCN, ctxOpts, uname, pswrd)
using(var newUser = new UserPrincipal(ctx)) {
newUser.Name = "newusername";
newUser.Enabled = true;
newUser.UserPrincipalName = "newusername";
newUser.Save();
newUser.SetPassword("newuserpassword");
}
错误1
如果我尝试创建一个新的UserPrincipal并在没有像上面的示例中那样设置密码的情况下调用Save我遇到的第一个问题我得到异常A constraint violation occurred.
,其中包含0000052D: AtrErr: DSID-033807D7, #1:0: 0000052D: DSID-033807D7, problem 1005 (CONSTRAINT_ATT_TYPE), data 2246, Att 9005a (unicodePwd)
的InnerException扩展消息
由于这个错误,我尝试在调用Save之前移动SetPassword以及我在网上找到的其他方法,例如从UserPrincipal获取DirectoryEntry并尝试调用SetPassword但得到了不同的错误。
错误2
在调用UserPrincipal.Save之前调用SetPassword,当调用save时,会导致错误The directory property cannot be found in the cache.
请注意,如果我尝试调用ResetPassword
或获取DirectoryEntry并调用Invoke("SetPassword"...
错误3
从我的研究中,大多数似乎表明这可能与需要使用安全连接访问AD LDS有关。因此,我将服务器更改为包含端口636 string server = "myadldsserver.com:636"
,并将ContextOptions更改为ContextOptions.SimpleBind | ContextOptions.SecureSocketLayer
。
在构造PrincipalContext时进行这些更改我得到以下异常The server could not be contacted.
,内部异常为The LDAP server is unavailable.
,HResult为-2146233087
JAVA和LDP
为了添加一些背景知识,我们确实在旧的Java应用程序中编写了类似的代码。我们试图在C#中将一些逻辑移植到.NET端。 Java中的代码使用包含在AD LDS服务器上生成的证书的Java密钥库。当然,Java应用程序使用SSL端口没有问题。我们知道服务器似乎配置正确,这只是如何从.NET端访问它的问题。
在.NET方面是否存在等效的内容,例如Java中的 keystore ?我们知道可以与服务器建立SSL连接。我们也使用LDP验证了这一点。
目标
答案 0 :(得分:3)
您是否尝试过使用Microsoft管理控制台导入证书?
安装证书的两种方法
无论
- 打开cmd.exe控制台并键入“MMC”
- 文件>添加/删除管理单元...
- 选择“证书”,单击“添加”
- 出现提示时选择计算机帐户和本地计算机,然后确定...
- 证书现在应显示在“控制台根目录”
下- 证书>受信任的根证书颁发机构>证书> (右键单击)>所有任务>进口证书......
- 找到要导入的证书,单击“下一步”并选择“默认值”(受信任的根证书颁发机构应该已经是 选择的)
- 单击“下一步”,“完成”
醇>
(或)
只需双击Windows中证书的.cer文件即可 资源管理器,单击安装证书...>下一个>选择选项 “将所有证书放在以下商店”>浏览...>选择 受信任的根证书颁发机构。继续下一步,直到完成。
此时已安装证书,您应该能够与ADLDS服务器安全通信。