Tag: active directory

从2 OU中查找Active Directory用户

我有一个.Net应用程序,它从特定OU(ABCUsers)中的活动目录中读取用户。 以下是代码: string DomainIP = “some domain IP”; string ContainerConnectionString = “OU=ABCUsers,DC=test,DC=com”; PrincipalContext domain = new PrincipalContext(ContextType.Domain, DomainIP, ContainerConnectionString, ContextOptions.SimpleBind); PrincipalSearcher searcher = new PrincipalSearcher(); UserPrincipal findUser = new UserPrincipal(domain); findUser.SamAccountName = “some username”; searcher.QueryFilter = findUser; UserPrincipal foundUser = (UserPrincipal)searcher.FindOne(); 上面的代码工作正常,但我需要更改代码,以便它检索用户是否在OU = ABCUsers或OU = XYZUsers中,但不在任何其他OU中。

限制LDAP查询中返回的属性

如何通过System.DirectoryServices限制LDAP查询中返回的属性? 我一直在使用DirectorySearcher并将我想要的属性添加到DirectorySearcher.PropertiesToLoad。 问题是,这只是确保添加的属性包含在DirectoryEntry.Properties以及一些默认列表中。 有没有办法指定您想要返回的唯一属性? DirectoryEntry base = new DiectoryEntry(rootPath, null, null, AuthenticationTypes.FastBind); DirectorySearcher groupSearcher = new DirectorySearcher(base); groupSearcher.Filter = “(objectClass=group)”; groupSearcher.PropertiesToLoad.Add(“distinguishedName”); groupSearcher.PropertiesToLoad.Add(“description”); foreach (SearchResult groupSr in groupDs.FindAll()) … 在foreach循环中,当我获得组DirectoryEntry时,我可以访问大约16种不同的属性,而不仅仅是我指定的两个属性(distinguishedName,description)

根据本地安全策略validation新的AD密码?

我想允许当前用户更改其密码(通过活动目录管理)。 我想validation然后在Active Directory中设置他们的密码(目前使用SetPassword调用方法 )。 我的问题是validation密码,以满足复杂性要求: 不包含用户的帐户名称或超过两个连续字符的用户全名部分长度至少为六个字符包含以下四个类别中的三个字符:英文大写字母(A到Z)英文小写字母(a到z) )基本10位数(0到9)非字母字符(例如,!,$,#,%)在更改或创建密码时强制执行复杂性要求。 我已经在使用带有两个文本框的CompareValidator ,所以我在考虑添加一个RegularExpressionValidator ( 源1 , 源2 ),但我不知道如何让它与整个“四个类别中的三个”一起工作: RegularExpressionValidator revComplex = new RegularExpressionValidator(); revComplex.ControlToValidate = _txtPassword1.ID; revComplex.ErrorMessage = “Password must have at least 7 characters. Characters should be from at least three of the following four groups: uppercase letter, lowercase letter, digit, or special characters (for example, !, $, […]

服务位置协议的客户端实现示例?

有谁知道可以在Windows机器上构建/运行的服务定位协议的一个很好的示例实现?

使用SSL联系Active Directory

我有一个方法来validation针对Active Directory的用户凭据。 我想在SSL中使用这种方法,但我无法使用它。 主要问题是我有一个服务器在我们的网络之外(它叫做DMZ?)。 从那里我想联系我的活动目录,这就是我想使用SSL的原因。 在我的本地计算机(而不是DMZ)上使用它时,我收到此错误: System.DirectoryServices.AccountManagement.PrincipalServerDownException:无法联系服务器。 —> System.DirectoryServices.Protocols.LdapException:LDAP服务器不可用。 在System.DirectoryServices.Protocols.LdapConnection.Connect() 在System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest请求,Int32和messageID) 在System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest请求,TimeSpan requestTimeout) 在System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest请求) 在System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName,ServerProperties&properties) —内部exception堆栈跟踪结束— 在System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName,ServerProperties&properties) 在System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval() at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType,String name,String container,ContextOptions options,String userName,String password) 在System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType,String name,String container,ContextOptions options) at Authorization.AuthorizeAD.ValidateCredentials(String username,String password) 我认为在我从服务器上尝试之前,让它从本地使用SSL会很好。 我的方法: public bool ValidateCredentials(string username, string password) { using ( var context = new PrincipalContext(ContextType.Domain, ContextName, ContextContainer, […]

在foreach期间处置

在这个问题中: 通过DirectoryEntry或任何对象层次结构循环 – C# 遍历LDAP树的建议答案是 DirectoryEntry root = new DirectoryEntry(someDN); DoSomething(root); function DoSomething(DirectoryEntry de){ // Do some work here against the directory entry if (de.Children != null) { foreach (DirectoryEntry child in de.Children) { DoSomething(child); } } } 我的问题是:你是否需要在每次迭代结束时对每个孩子调用Dispose()? 或者foreach循环是否会处理对Dispose()的必要调用? 或者它们在foreach循环中根本不是必需的(因为循环可能会重新使用本来想要Dispose()的资源)

Active Directory和PrincipalPermission

这更像是一种好奇心而不是请求帮助,但我注意到当使用PrincipalPermission并validation用户是Active Directory中特定组的一部分时,它不会使用真正的组名,而是针对Windows 2000之前的组进行validation而是改名。 通常这不会产生任何影响 – 除非有人碰巧使这些价值观有所不同。 任何人都可以想到为什么.Net API会使用该组名而不是“真正的”名称? 这给我带来了几个小时的悲伤和一点点的运气,最终弄明白了。

Microsoft Exchange:如何解析一个杰出的名称

我该如何解决这个问题: /O=CHEESE/OU=FIRST ADMINISTRATIVE GROUP/CN=RECIPIENTS/CN=LHALA1 到电子邮件地址? 我必须使用Exchange Web服务吗?

如何在Asp.Net中获取用户的AD用户组?

我需要能够获得用户所在组的列表,但我需要看到一个/部分/全部以下属性: 专有名称 名称 CN SAM帐户 我现在拥有的是某种名称,但不是上面的任何名称(名称似乎很接近,但并不是所有名称都正确匹配。这就是我正在使用的: ArrayList groups = new ArrayList(); foreach (System.Security.Principal.IdentityReference group in System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups) groups.Add(group.Translate(typeof(System.Security.Principal.NTAccount))); 就像我说的,上面的工作,但不会得到我的程序所需的正确名称(上面指定的名称)。 我需要这个能够匹配我在调用我的域中的所有组时获得的列表: DirectoryEntry dirEnt = new DirectoryEntry(“LDAP://my_domain_controller”); DirectorySearcher srch = new DirectorySearcher(dirEnt); srch.Filter = “(objectClass=Group)”; var results = srch.FindAll();

如何使用c#从Active Directory中删除计算机帐户

是否有任何样本使用C#从AD中删除计算机帐户? 我搜索了很多来源,但都是关于用户帐户的。 在这里添加了我的代码,我总是出于某种原因出错。 public static bool checkExistingPC(string compName,string userName,string userPwd ) { try { DirectoryEntry entry = new DirectoryEntry(“LDAP://test.com”,userName,userPwd,AuthenticationTypes.Secure); DirectorySearcher mySearcher = new DirectorySearcher(entry); mySearcher.Filter = “(&(objectClass=computer)(|(cn=” + compName + “)(dn=” + compName + “)))”; foreach (SearchResult result in mySearcher.FindAll()) { if (result != null) { MessageBox.Show(“computer GetDirectoryEntry():” + result.Path+”\n”+”computer path: “+result.Path); DirectoryEntry entryToRemove = […]