使用PrincipalContext和ADLDS,LDAP服务器不可用
我们正在利用ADLDS进行用户管理和身份validation。 我们可以毫无问题地成功查询实例。 但是,如果未设置密码,尝试执行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我遇到的第一个问题我得到exceptionA constraint violation occurred.
具有InnerException扩展消息0000052D: AtrErr: DSID-033807D7, #1:0: 0000052D: DSID-033807D7, problem 1005 (CONSTRAINT_ATT_TYPE), data 2246, Att 9005a (unicodePwd)
由于这个错误,我尝试移动SetPassword之前调用Save以及我在网上找到的其他方法,例如从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
ContextOptions.SimpleBind | ContextOptions.SecureSocketLayer
。
在构造PrincipalContext时进行这些更改我得到以下exceptionThe server could not be contacted.
内部exceptionThe LDAP server is unavailable.
,HResult是-2146233087
JAVA和LDP
为了添加一些背景知识,我们确实在旧的Java应用程序中编写了类似的代码。 我们试图在C#中将一些逻辑移植到.NET端。 Java中的代码使用包含在AD LDS服务器上生成的证书的Java密钥库。 Java应用程序当然使用SSL端口没有问题。 我们知道服务器似乎配置正确,这只是如何从.NET端访问它的问题。
在.NET方面是否存在类似Java中的密钥库 ? 我们知道可以与服务器建立SSL连接。 我们也使用LDPvalidation了这一点。
GOALS
您是否尝试使用Microsoft管理控制台导入证书?
两种安装证书的方法
或
- 打开cmd.exe控制台并键入“MMC”
- 文件>添加/删除管理单元…
- 选择“证书”,单击“添加”
- 出现提示时选择计算机帐户和本地计算机,然后确定…
- 现在应该在控制台根目录下显示证书
- 证书>受信任的根证书颁发机构>证书>(右键单击)>所有任务>导入证书…
- 找到要导入的证书,单击“下一步”并选择“默认值”(应已选择“受信任的根证书颁发机构”)
- 单击下一步,完成
(要么)
只需在Windows资源管理器中双击证书的.cer文件,单击“安装证书…”>“下一步”>选择“将所有证书放在以下存储中”选项>浏览…>选择“受信任的根证书颁发机构”。 继续下一步,直到完成。
此时,您的证书已安装,您应该能够与ADLDS服务器安全地通信。
上述就是C#学习教程:使用PrincipalContext和ADLDS,LDAP服务器不可用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1031311.html