我们正在使用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并在没有设置密码的情况下调用保存,我遇到的第一个问题就像上面的例子一样,我得到了带有InnerException扩展消息的异常0000052D: AtrErr: DSID-033807D7, #1:0: 0000052D: DSID-033807D7, problem 1005 (CONSTRAINT_ATT_TYPE), data 2246, Att 9005a (unicodePwd)
由于这个错误,我尝试在调用Save之前移动SetPassword,以及我在网上找到的其他方法,比如从UserPrincipal获取DirectoryEntry和尝试调用SetPassword,但是得到了不同的错误。
误差2
在调用SetPassword之前调用UserPrincipal.Save,当调用保存时,将导致错误The directory property cannot be found in the cache.
注意,如果我尝试调用ResetPassword或获取DirectoryEntry并调用Invoke("SetPassword"...,也会发生相同的错误。
误差3
从我的研究中,大多数人似乎表明,这可能与需要使用安全连接访问AD有关。因此,我将服务器更改为包含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应用程序中编写了类似的代码。我们正在尝试将其中一些逻辑移植到.NET side中的C#中。Java中的代码使用了包含在AD服务器上生成的证书的Java。当然,Java应用程序在使用SSL端口时没有问题。我们知道服务器的配置似乎是正确的,这只是一个如何从.NET端访问它的问题。
在.NET端是否存在类似的内容,如密钥存储库( Java )?我们知道可以将SSL连接到服务器。我们也用自民党验证了这一点。
目标
发布于 2017-05-10 18:19:31
您试过使用Microsoft管理控制台导入证书吗?
安装证书的两种方法
任一
(或)
只需双击Windows中证书的.cer文件,单击安装证书.> Next >选择“将所有证书放置在以下存储区”>浏览.>选择受信任的根证书颁发机构。继续下一个,直到完成。
此时您的证书已经安装,您应该能够安全地与您的ADLDS服务器进行通信。
https://stackoverflow.com/questions/43897497
复制相似问题