使用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

  • 能够在创建期间创建新用户并设置其密码
  • 能够为用户重置密码或ChangePassword
  • 安全地从.NET连接到我们的AD LDS实例

您是否尝试使用Microsoft管理控制台导入证书?

两种安装证书的方法

  1. 打开cmd.exe控制台并键入“MMC”
  2. 文件>添加/删除管理单元…
  3. 选择“证书”,单击“添加”
  4. 出现提示时选择计算机帐户和本地计算机,然后确定…
  5. 现在应该在控制台根目录下显示证书
  6. 证书>受信任的根证书颁发机构>证书>(右键单击)>所有任务>导入证书…
  7. 找到要导入的证书,单击“下一步”并选择“默认值”(应已选择“受信任的根证书颁发机构”)
  8. 单击下一步,完成

(要么)

只需在Windows资源管理器中双击证书的.cer文件,单击“安装证书…”>“下一步”>选择“将所有证书放在以下存储中”选项>浏览…>选择“受信任的根证书颁发机构”。 继续下一步,直到完成。


此时,您的证书已安装,您应该能够与ADLDS服务器安全地通信。

Interesting Posts