首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用用户主体类设置AD-LDS用户密码。

不能用用户主体类设置AD-LDS用户密码。
EN

Stack Overflow用户
提问于 2014-05-26 16:48:11
回答 2查看 2K关注 0票数 1

我被处理AD用户对象的UserPrincipal类困住了。虽然我可以查询用户,更改属性并将其保存回AD,但一旦我试图设置(或更改)密码,我总是会得到一个附加信息PrincipalOperationException ():“目录属性在缓存中找不到”

如果我通过ADSI-编辑更改用户的密码,一切都正常。因此,我认为这不是一个模式问题。我使用简单绑定和不使用SSL (它是一台开发机器)进行绑定。我允许通过dsmgmt设置不安全密码选项。我用来连接的用户位于用户所在的目录单元的管理角色中。代码看起来如下(简化):

代码语言:javascript
复制
using (var ctx = GetPrincipalContext()) {                
    UserPrincipal u = UserPrincipal.FindByIdentity(ctx, IdentityType.Name, identityValue);         
    u.SetPassword("12345$äöAAA1234_");  
    u.Save();
}

其中上下文是在GetPrincipalContext()中创建的,如下所示:

代码语言:javascript
复制
new PrincipalContext(ContextType.ApplicationDirectory, "localhost", "[DC=...]", ContextOptions.SimpleBind,"[username of adminuser]","[Password of admin user]");

当我尝试创建一个新的UserPrincipal,然后保存它时,也会出现同样的问题。我想,这也是因为附加的密码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-05 08:21:41

长话短说这是个安全问题。只要与As的连接不是通过SSL建立的,处理密码的一切都是令人头疼的。

在找到初始问题的解决方案(请参阅下面)之后,我得出结论,使用证书安装all要比尝试解决没有SSL的配置(即使是在开发中)所产生的所有问题要有效得多。因此,我建议每个想要使用AD的人做安装开发证书的额外工作。这样做的复杂性低于在没有SSL的情况下解决所有问题的复杂性。在进行了一些googling搜索之后,我能够使用windows的makecert-programm创建和安装必要的证书。

对于那些对解决方案感兴趣的人来说,

在阅读了大量关于AD及其身份验证方式之后,我的理解是,不使用SSL的User主体类设置密码是不可能的。作为解决办法,DirectoryEntry-类可以通过LDAP调用SetPassword-methdod。然而,它需要一些参数化:

代码语言:javascript
复制
const long ADS_OPTION_PASSWORD_PORTNUMBER = 6;
const long ADS_OPTION_PASSWORD_METHOD = 7;
const int ADS_PASSWORD_ENCODE_CLEAR = 1;

directoryEntry.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_PORTNUMBER, intPort });
directoryEntry.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_METHOD, ADS_PASSWORD_ENCODE_CLEAR});
directoryEntry.Invoke("SetPassword", new object[] { "MyPassword" });

此外,有必要允许通过dsmgmt-命令行工具进行非保存密码通信。

了解到了发生了什么,我从在线预览的书http://www.amazon.de/Developers-Directory-Programming-Microsoft-Development/dp/0321350170虽然我可能不再需要这本书,我命令它捐赠作者,他节省了我的搜索时间。虽然它是古老的,这本书包含了非常好的解释AD (亚当),这仍然是相关的今天。

票数 4
EN

Stack Overflow用户

发布于 2021-03-03 16:23:14

有一种设置密码的方法,但您需要更改ADLDS设置,以允许在不安全的通道上设置密码。

代码语言:javascript
复制
cmd\
dsmgmt\
ds behavior\
connections\
connect to server localhost:389\
quit\
allow passwd op on unsecured connection\
quit\
quit
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23874598

复制
相关文章

相似问题

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