Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LDAP服务器无法使用PrincipalContext和ADLDS_C#_Directoryservices_Userprincipal_Principalcontext_Adlds - Fatal编程技术网

C# LDAP服务器无法使用PrincipalContext和ADLDS

C# LDAP服务器无法使用PrincipalContext和ADLDS,c#,directoryservices,userprincipal,principalcontext,adlds,C#,Directoryservices,Userprincipal,Principalcontext,Adlds,我们正在利用ADLDS进行用户管理和身份验证。我们可以毫无问题地成功查询实例。但是,尝试执行诸如SetPassword之类的操作将失败,甚至尝试创建新用户也会失败。如果未设置密码,则会失败。我可以成功地更新一个用户,只要它不是我试图更新的密码。我读了很多关于这方面的文章,但没有找到解决办法。张贴,看看我是否可以得到一些关于这个问题的新观点,感谢任何意见 示例 ContextType ctxType=ContextType.ApplicationDirectory; string server=“

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

示例

ContextType ctxType=ContextType.ApplicationDirectory;
string server=“myadldsserver.com”;
字符串usersCN=“CN=Users,”;//用户居住的容器
ContextOptions ctxOpts=ContextOptions.SimpleBind;
字符串uname=“myuser”;
字符串pswrd=“mypass”;
使用(var ctx=new PrincipalContext(ctxType、server、usersCN、ctxOpts、uname、pswrd)
使用(var newUser=newuserprincipal(ctx)){
newUser.Name=“newusername”;
newUser.Enabled=true;
newUser.UserPrincipalName=“newusername”;
newUser.Save();
SetPassword(“newuserpassword”);
} 
错误1

我遇到的第一个问题是,如果我尝试创建一个新的UserPrincipal并调用Save,而没有像上面的示例那样设置密码,我会遇到异常
发生约束冲突。
带有
0000052D:aterrr:DSID-033807D7的InnerException扩展消息,#1:0:0000052D:DSID-033807D7,问题1005(约束附件类型),数据2246,附件9005a(unicodePwd)

由于这个错误,我尝试在调用Save之前移动SetPassword,以及我在网上找到的其他方法,例如从UserPrincipal获取DirectoryEntry,并尝试调用SetPassword,但出现了不同的错误

错误2

在调用UserPrincipal.Save之前调用SetPassword会在调用Save时导致错误
在缓存中找不到目录属性。

请注意,如果我尝试调用
ResetPassword
或获取DirectoryEntry并调用
Invoke(“SetPassword”…
),也会发生相同的错误

错误3

根据我的研究,大多数人似乎认为这可能与需要使用安全连接访问AD LDS有关。因此,我将服务器更改为包含636的端口
string server=“myadldsserver.com:636”
,并将ContextOptions更改为
ContextOptions.SimpleBind | ContextOptions.SecureSocketLayer

在构造PrincipalContext时进行这些更改,我得到以下异常
无法联系服务器。
内部异常
LDAP服务器不可用。
,HResult为-2146233087

JAVA和LDP

为了增加一些背景知识,我们在一个较旧的Java应用程序中编写了类似的代码。我们正在尝试将一些逻辑移植到C#中的.NET端。Java中的代码使用一个Java密钥库,其中包含在AD LDS服务器上生成的证书。当然,Java应用程序在使用SSL端口时没有问题。我们可以现在服务器似乎配置正确了,问题只是如何从.NET端访问它

在.NET端是否有类似于Java中的密钥库?我们知道可以与服务器建立SSL连接。我们也使用LDP验证了这一点

目标

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

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

安装证书的两种方法

或者

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

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



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

    谢谢@Mindwalker2076这对我来说很有效。我想我必须在需要使用.NET代码访问AD LDS服务器的每台计算机上执行此操作?