首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PrincipalContext和ADLDS的LDAP服务器不可用

使用PrincipalContext和ADLDS的LDAP服务器不可用
EN

Stack Overflow用户
提问于 2017-05-10 15:57:38
回答 1查看 3.4K关注 0票数 4

我们正在使用ADLDS进行用户管理和身份验证。我们可以在没有问题的情况下成功地查询实例。但是,尝试执行像SetPassword这样的操作将失败,甚至尝试创建一个新用户,如果没有设置密码,则会失败。我可以成功地更新一个用户,只要它不是我想要更新的密码。我读了很多关于这方面的不同文章,但没有找到解决办法。张贴,看看我是否能得到一些新的观点,在这个问题上,感谢任何意见。

示例

代码语言:javascript
复制
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连接到服务器。我们也用自民党验证了这一点。

目标

  • 能够在创建过程中创建新用户并设置他们的密码。
  • 能够为用户提供ResetPassword或ChangePassword
  • 从.NET安全地连接到AD实例
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-10 18:19:31

您试过使用Microsoft管理控制台导入证书吗?

安装证书的两种方法

任一

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

(或)

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43897497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档