Tag: active directory

DirectoryServices UserPrincipal.SetPassword忽略密码策略(密码历史记录)

正如标题所示,我在设置用户密码时遇到了关于尊重密码策略的问题,特别是密码历史记录限制。 当用户不知道他当前的密码时,该方案是用户密码重置。 我使用以下内容来完成此任务: using (PrincipalContext context = new PrincipalContext(ContextType.Domain, “XXXX”, “ADMINUSER”, “ADMINPASSWORD”)) { using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username)) { user.SetPassword(password); } } 这适用于每个策略MINUS密码历史记录限制。 现在采取这种情况,当用户想要更改他们的密码并知道我正在使用的当前密码时: using (PrincipalContext context = new PrincipalContext(ContextType.Domain, “XXXX.XXX.com”)) { using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username)) { user.ChangePassword(currentPassword, newPassword); } } …按预期工作,并validation所有密码策略限制。 有没有人不得不这样做? 干杯:)

C#使用DirectoryEntry启用用户帐户

我想知道是否启用了用户帐户。 我用这个代码: var usersList = new List(); DirectoryEntry localMachine = new DirectoryEntry(“WinNT://” + computerName + “,Computer”, Settings.UserName,Settings.UserPassword); DirectoryEntry admGroup = localMachine.Children.Find(Settings.AdministratorsGroup, “group”); object members = admGroup.Invoke(“members”, null); foreach (object groupMember in (IEnumerable)members) { DirectoryEntry member = new DirectoryEntry(groupMember); var b = member.Properties[“userAccountControl”].Value; // <—- value == null usersList.Add(member); } 我正确地得到了所有成员。 但是member.Properties[“userAccountControl”].Value出现了一个错误member.Properties[“userAccountControl”].Value 。 我知道使用System.DirectoryServices.AccountManagement namepsace,但我想知道为什么这段代码不起作用。

确定Active Directory搜索结果中用户的域

可能重复: 如何从AD DirectoryEntry获取DOMAIN \ USER? 这就是我现在所拥有的: DirectoryEntry de = new DirectoryEntry(“LDAP://” + domain); SearchResult result; DirectorySearcher search = new DirectorySearcher(de); search.Filter = String.Format(“(cn={0})”, groupName); search.PropertiesToLoad.Add(“member”); result = search.FindOne(); 请注意, groupName (传递给表示要搜索的组的名称的方法的参数)可以是通用组,这意味着它可能包含来自其他域的帐户。 我应该使用searchresultcollection中的哪个属性来查找帐户所源自的域,或者更好的是是否有一个网页,其中包含此特定集合可用的所有属性的列表?

我如何在.NET中处理Negotiate?

我正在尝试在小型Web服务器中实现Negotiate(至少是Kerberos部分)。 我已经想出如何让客户端向我发送Kerberos Negotiate Authorization标头。 我已经弄清楚如何解码这些数据(ASN.1)。 我无法弄清楚如何将其变成WindowsIdentity 。 我可以从KerberosReceiverSecurityToken中了解我的情况,但是找不到像NegotiateReceiverSecurityToken这样的东西。 我一直在挖掘大量的DLL,我不能为我的生活找出IIS / .NET处理Negotiate标头的地方。 我假设(如果我有自己的SspiWrapper )我会用SspiWrapper.AcquireDefaultCredential(“Negotiate”, CredentialUse.Inbound)做一些事情来获取一个SSPI上下文,我可以用它来调用AcceptSecurityContext/Negotiate ,然后使用QuerySecurityContextToken来获取令牌我可以创建一个WindowsIdentity 。 但是KerberosReceiverSecurityToken使得它看起来像一个非常复杂的过程。 并且不知道如何做到这一点或授权头部有效负载的哪一部分放入其中,我可能会在没有任何地方的情况下击败它一个月。 (在你提出或回答之前,我完全没有兴趣使用内置的谈判逻辑。如果我能找到它,我会从中学习,但我一直在努力让它为FAR工作很久。而我完成了。)

读取本地组策略/ Active Directory设置

我正在编写一个C#程序,它将根据Windows组策略设置“密码必须满足复杂性要求”强制执行密码复杂性。 具体来说,如果该策略在本地计算机(如果它不是域的一部分)或域安全策略(对于域成员)上设置为“已启用”,则我的软件需要为其自身的内部安全性强制执行复杂的密码。 问题是我无法弄清楚如何阅读该GPO设置。 Google搜索表明我可以使用以下两种API中的一种来读取GPO设置:.NET Framework中的System.DirectoryServices库和Windows Management Instrumentation(WMI),但到目前为止我还没有取得任何成功。 任何见解都会有所帮助。

密码更改Active Directory用户时出错

您好我正在尝试重置Active Directory用户的密码但我收到错误,以下是我的代码: public string ChangePassword(string Identity,string OldPassword, string Password) { string success = “Success”; try { DirectoryEntry UserEntry = null; DirectoryEntry entry = new DirectoryEntry(“LDAP://…/DC=Domain,DC=COM”, Identity, OldPassword); DirectorySearcher search = new DirectorySearcher(entry); SearchResult resultsearch = search.FindOne(); if (resultsearch == null) { success = “User Not Found In This Domain”; } else { success = “find”; […]

如何使用PrincipalContext搜索全局编录(整个林)

myUserList AppUsers = new myUserList(); using (PrincipalContext pcxt = new PrincipalContext(ContextType.Domain, domainName)) { UserPrincipal User = new UserPrincipal(pcxt); User.EmailAddress = emailString; PrincipalSearcher srch = new PrincipalSearcher(User); foreach (var principal in srch.FindAll()) { var p = (UserPrincipal)principal; myUserRow User = AppUsers.NewUsersRow(); User.FirstName = p.GivenName; User.LastName = p.Surname; User.Email = p.EmailAddress; AppUsers.AddUsersRow(User); } } 我有类似于上面的代码,使用PrincipalContext类在Active Directory中搜索用户信息。 正如您所看到的,我在搜索过程中传入了domainName。 […]

如何通过WebRequest调用MVC操作并通过Active Directoryvalidation请求?

我知道标题是满口的。 我已经掌握了大部分的东西。 我只需要确认我是否可以做我正在尝试的事情。 我正在使用ASP.NET MVC 3.我有一个应用程序,它具有我使用的控制器,就像一个Web服务。 控制器上有一个方法,它返回一个字符串,即json。 此方法根据活动目录对用户进行身份validation。 对上述应用程序执行WebRequest的应用程序也是MVC应用程序。 此应用程序(为了在没有特定用户名和密码的情况下查询AD)正在web.config中使用模拟。 该应用程序模拟有权查询AD的帐户; 但是,页面上用户的信息(例如他们所在的组)是我validation的。 简而言之(我并不完全理解这一部分),模仿是严格的,因此ASP.NET可以查询Active Directory。 当我查询活动目录以获取其信息时,加载页面的用户仍被视为自己。 AD代码如下所示(此代码有效): public static ADUserInfo GetUserInfo(IPrincipal User) { StringBuilder userAdInfo = new StringBuilder(); ADUserInfo userInfo = new ADUserInfo(); String domain = ConfigurationManager.AppSettings[“ADdomain”]; try { using (var context = new PrincipalContext(ContextType.Domain, domain)) { if (User == null) userAdInfo.AppendLine(“User is null.”); else if […]

Active Directory,枚举用户组,COMexception

通过AD .NET API枚举当前用户的组我有时会得到 COMException: Unknown error (0x80005000) 这是我的代码: var userName = Environment.UserName; var context = new PrincipalContext(ContextType.Domain); var user = UserPrincipal.FindByIdentity(context, userName); foreach (var userGroup in user.GetGroups()) { Console.WriteLine(userGroup.Name); } 有什么问题? 我认为每个用户都可以检索HIS组的列表?这似乎是奇怪的行为,有时它可以像这样再现:当在’userA’PC上运行时,它崩溃了,但它成功地枚举了其他’userB’组(在’下’用户A’)!

通过System.DirectoryServices管理终端用户

我有一个环境,我需要经常将参数更改为用户登录终端服务器时启动的程序。 截至目前,我们打开计算机管理管理单元并编辑用户的环境选项卡,并在“登录时启动以下程序:”下手动更改参数。 我想自动化这个过程。 我一直在寻找System.DirectoryServices和System.DirectoryServices.AccountManagement并阅读我所能做的一切。 到目前为止,我最好的猜测是我需要编辑的信息存储在“参数”属性中(对于属性来说可能是最糟糕的名称,废话搜索)。 猜测的原因是我列出了我得到的所有属性 (…) Name: HomeDirDrive Value: Name: Parameters Value: P☺CtxCfgPresent????☺CtxCf gFlags1????☺CtxShadow????*☻☺CtxMinEncryptionLevel? @☺CtxWorkDirectory??????????? ?????????????????????”C☺CtxInitialProgram??????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????? ??????????????? Name: PrimaryGroupID Value: 513 (…) CtxInitialProgram和CtxWorkDirectory似乎与我正在使用的内容相关。 现在我陷入困境,因为我无法弄清楚如何,或找到和资源来帮助我,正确地读取和写入值。 任何帮助将不胜感激。 编辑 – 我在互联网上的其他地方找到了这个答案在互联网上的其他地方问我找到了答案: 不幸的是,这些数据是以专有格式编码的。 以编程方式管理它的唯一受支持的方法是使用终端服务附带的IADsTSUserEx ADSI接口。 您基本上只是将NativeObject属性强制转换为此COM接口(在创建所需的COM引用之后),然后访问该接口公开的属性。 现在我的问题是如何设置COM引用,我之前从未做过类似的事情。