Tag: ldap

将LDAP中的WhenChanged属性(Generalized-Time)转换为C#中的DateTime

我最近从使用S.DS命名空间(使用ADSI)切换到S.SD.Protocol命名空间。 唯一的问题是ADSI为我处理了Generalized-Time到DateTime的转换。 现在我为WhenChanged属性取回了值“20070828085401.0Z”。 DateTime.Parse()不会转换它,所以有另一种方式吗?

IIS抱怨使用LDAP身份validation进行身份模拟

我按照教程在ASP.NET / C#4.0 Web应用程序中实现LDAP身份validation。 我在Visual Studio 2010中这样做了。该站点在调试模式下通过Visual Studio运行良好,但是当我在IIS7中发布此站点时,它失败并出现以下错误: HTTP错误500.24 – 内部服务器错误检测到的ASP.NET设置不适用于集成管理管道模式。 最可能的原因: system.web/identity@impersonate设置为true。 事实上,本教程的一部分要求我将其添加到配置文件中… 那么为什么我会收到此错误,我该如何解决?

如何检查LDAP上是否存在用户

我需要使用他们的用户名来validation公司中的用户 – 而不是他们的密码。 所以我需要这样的方法 public bool UserExists(string username) { … } 我知道System.DirectoryServices命名空间,但不知道从哪里开始。 有任何想法吗? 有80,000多条记录,所以请记住这一点。 谢谢。 编辑: 我做到了 – 我的代码是: private bool UserExists(string userName, string domain) { try { DirectoryEntry.Exists(“WinNT://” + domain + “.[hidden].com/” + userName); return true; } catch (COMException) { return false; } } 我不知道它是否正确,但它似乎到目前为止工作。 迈克尔的答案有两个相关部分: http://www.codeproject.com/KB/system/everythingInAD.aspx#22 http://www.codeproject.com/KB/system/everythingInAD.aspx#35 更新#2: 我实际上用过这个: public static bool LoggedOnUserExists() […]

使用ASP.NET获取Active Directory信息,无需用户名和密码

我试图从ASP.NET Web应用程序获取用户在本地网络上的Active Directory信息。 Web应用程序正在本地网络上的IIS上运行。 我想要的:当用户登录网站时,他们可以从Active Directory中看到他们的姓名,用户名,电子邮件和图片。 问题是,当他们进入他们的网站时,Web应用程序要求输入用户名和密码。 用户在打开PC时已经输入了用户名和密码。 所以他们不应该再做一次。 用户使用其用户名和密码登录PC。 我可以获得域名和用户名: string adInfo = Request.ServerVariables[“LOGON_USER”]; 我还可以在测试System.DirectoryServices时在我的本地PC上获取Active Directory信息,但是当其他用户在本地尝试此Web应用程序时,会出现用户名和密码对话框。 如何才能使用户无需输入用户名和密码即可进入其网站? 我在这里尝试了所有样品,但我找不到任何解决方案。 我想我错过了一些重要的事情。

PrincipalContext.ValidateCredentials使用NetBios名称在受信任域中变慢

我已经创建了一个服务,使用System.DirectoryServices.AccountManagementvalidation针对Active Directory的凭据。 我需要针对本地域以及可信域validation凭据。 在我的计算机上运行时,本地和受信任域的validation凭据的响应时间很快。 当我将此服务移动到我们的服务器时,本地域响应很快,但受信任的域响应非常慢(20 – 30秒)。 我还发现,如果我将PrincipalContext中的域名从NetBios名称更改为DNS名称,则会更正服务器上的性能问题。 这是一些例子 PrincipalContext context = new PrincipalContext(ContextType.Domain, sNetBiosName) context.ValidateCredentials(sUsername, sPassword) 在服务器上,使用NetBios名称需要20-30秒 PrincipalContext context = new PrincipalContext(ContextType.Domain, sDNSName) context.ValidateCredentials(sUsername, sPassword) 使用DNS名称,响应为0-2秒 有关需要在服务器上设置什么以便使用NetBios名称加快速度的任何想法?

在C#中将LDAP AccountExpires转换为DateTime

我想将来自LDAP AccountExpires的18位数字符串转换为正常日期时间格式。 129508380000000000 >> 2011年5月26日 我使用以下链接获得了上述转换。 http://www.chrisnowell.com/information_security_tools/date_converter/Windows_active_directory_date_converter.asp?pwdLastSet,%20accountExpires,%20lastLogonTimestamp,%20lastLogon,%20and%20badPasswordTime 我尝试使用DateTime.Parse或Convert.ToDateTime进行转换。 但没有成功。 有谁知道如何转换它? 非常感谢。

如何使用LDAP从Active Directory获取所有用户的详细信息

我需要使用LDAP从Active Directory获取所有用户的详细信息。 以下代码确实将Samaccountname作为“管理员”,但不是每个用户的详细信息,并且在列表中找不到邮件ID。 请帮助。 string dominName = ConfigurationManager.AppSettings[“DominName”].ToString(); string ldapPath = ConfigurationManager.AppSettings[“ldapPath”].ToString(); if (!String.IsNullOrEmpty(dominName) && !String.IsNullOrEmpty(ldapPath)) { DirectoryEntry entry = new DirectoryEntry(ldapPath, txtUsername.Text.ToString().Trim(), txtPassword.Text.ToString().Trim()); try { Object obj = entry.NativeObject; DirectorySearcher search = new DirectorySearcher(entry); search.Filter = “(&(objectClass=user)(objectCategory=person))”; search.PropertiesToLoad.Add(“samaccountname”); search.PropertiesToLoad.Add(“mail”); search.PropertiesToLoad.Add(“usergroup”); search.PropertiesToLoad.Add(“displayname”);//first name foreach (System.DirectoryServices.SearchResult resEnt in search.FindAll()) { System.DirectoryServices.DirectoryEntry de = resEnt.GetDirectoryEntry(); if (de.Properties[“sAMAccountName”].Value […]

Novell LDAP C# – Novell.Directory.Ldap – 有没有人让它工作?

我正在尝试使用Novell发布的库(Novell.Directory.Ldap)。 版本2.1.10。 到目前为止我做了什么: 我测试了与应用程序( LdapBrowser )的连接并且它正在工作,所以它不是通信问题。 它是用Mono编译的,但我正在使用Visual Studio。 所以用源创建了一个项目。 我还提到了对Mono.Security的引用,因为该项目取决于它。 我在连接的错误捕获部分中评论了一个调用(freeWriteSemaphore(semId);),因为它抛出了更多exception。 我检查了那个调用做了什么,它只是一个错误跟踪机制。 我按照Novell( http://www.novell.com/coolsolutions/feature/11204.html )文档中提供的基本步骤进行操作。 //创建LdapConnection实例 LdapConnection ldapConn = new LdapConnection(); ldapConn.SecureSocketLayer = ldapPort == 636; // Connect函数将创建与服务器的套接字连接 ldapConn.Connect(ldapHost,ldapPort); //绑定function将用户对象凭据绑定到服务器 ldapConn.Bind(用户DN,userPasswd); 现在它正在崩溃Bind()函数。 我收到错误91。 那么,有人曾经使用过这个库并看到它有效吗? 如果是这样,你做了什么让它工作,是否需要一些特殊的配置? 有没有办法让它在没有Mono的.NET环境中工作(我可以引用Mono dll,但我不希望它安装在服务器上)? (更新)连接在端口636上,因此使用SSL。 我查看了WireShark的通信,并与我从LDAP浏览器中获得的内容进行了比较。 我已经看到,SSL证书的通信步骤不是由LDAP库完成的。 那么,让它做到它应该做的最好的方法是什么? (更新)我检查了文档,它表明它不支持SSL。 http://www.novell.com/coolsolutions/feature/11204.html 使用LdapConnection.Bind()对LDAP服务器进行身份validation。 我们仅支持明文身份validation。 尚未添加SSL / TLS支持。 但是文档的日期是2004年,从那时起,已经进行了许多更新。 并且库中有一个参数来定义连接是否使用SSL。 所以现在我很困惑。 (更新)找到了更新的文档: http : //developer.novell.com/documentation//ldapcsharp/index.html?page […]

c#针对LDAP上的Active Directory

我正在编写一些针对Active Directory的c#,并且无休止地尝试使其工作无济于事。 以下代码有效,其后面的代码不起作用: 下面的代码使用“WinNT://”+ Environment.MachineName +“,Computer”来建立连接并正常工作。 DirectoryEntry localMachine = new DirectoryEntry (“WinNT://” + Environment.MachineName + “,Computer”); DirectoryEntry admGroup = localMachine.Children.Find (“Administrators”, “group”); object members = admGroup.Invoke(“members”, null); foreach (object groupMember in (IEnumerable)members) { DirectoryEntry member = new DirectoryEntry(groupMember); output.RenderBeginTag(“p”); output.Write(member.Name.ToString()); output.RenderBeginTag(“p”); } base.Render(output); 我现在正试图改变这条线: “WinNT://” + Environment.MachineName + “,Computer” 至 “LDAP://MyDomainControllerName” 但似乎无论我尝试什么价值代替价值’MyDomainControllerName’它都不会工作。 要获取’MyDomainControllerName’值,我右键单击MyComputer并按照其他地方的建议复制计算机名称值,但这不起作用。 当我尝试使用上面的LDAP:// RootDSE选项时,会导致以下错误: […]

LdapConnection与PrincipalContext

我有以下两种使用LDAP和LDAPSvalidation用户的实现,我想知道哪个更好/更正确。 对于记录,这两个都适用于SSL和非SSL连接。 我也很好奇,因为在Non-SSL PrincipalContext版本上使用Wireshark观看时,我仍然看到端口636上的流量。在四种组合中( Non-SSL LdapConnection , SSL LdapConnection , Non-SSL PrincipalContext , SSL PrincipalContext ),它是只有一个在389和636端口都有流量,而不只是一个或另一个。 可能是什么导致了这个? LDAP连接方法: bool userAuthenticated = false; var domainName = DomainName; if (useSSL) { domainName = domainName + “:636”; } try { using (var ldap = new LdapConnection(domainName)) { var networkCredential = new NetworkCredential(username, password, domainName); ldap.SessionOptions.VerifyServerCertificate = new VerifyServerCertificateCallback((con, […]