C# 调用LDAP接口获取域用户信息

C# 调用LDAP接口获取域用户信息:

 根据用户显示名称和邮箱的前半部分,拉去相应的用户列表,进行智能提示。 web 的提示控件可以用select2.

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Configuration;
using System.Diagnostics;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
using System.DirectoryServices.Protocols;
using System.IO.Ports;
using System.Linq;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.DirectoryServices.Protocols;

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {


            /*https://support.jumpcloud.com/customer/portal/articles/2439978-filtering-by-user-or-group-in-ldap-search-filters- 
             * Get all entries: (objectClass=*)
             * Get entries containing "bob" somewhere in the common name:(cn=*bob*)
             * Get entries with a common name greater than or equal to "bob":(cn>='bob')
             * Get all user entries with an email attribute and a surname equal to "smith":(&(sn=smith)(objectClass=user)(email=*))
             * Get all user entries with a common name that starts with "andy", "steve", or "margaret":(&(objectClass=user)(| (cn=andy*)(cn=steve*)(cn=margaret*)))
            */
            //first
            Stopwatch sw = new Stopwatch();
            sw.Start();
//LDAPS的url也要用LDAP:// DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://aa.bb.global.baidu.com:3269", "username", "password", AuthenticationTypes.SecureSocketsLayer); //directoryEntry.Options DirectorySearcher searcher = new DirectorySearcher(directoryEntry) { PageSize = 3, SizeLimit = 3, Asynchronous = false, CacheResults = false, ClientTimeout = new TimeSpan(0, 0, 1), Filter = "(&(objectCategory=person)(objectClass=user)(|(cn=lm*)(mail=lm*)))" }; searcher.PropertiesToLoad.AddRange(new[] { "cn", "sn", "displayName", "mail", "department", "company" }); SearchResultCollection result = searcher.FindAll(); sw.Stop(); foreach (SearchResult oResult in result) { Console.WriteLine(oResult.Properties["cn"][0] + " : " + (!oResult.Properties.Contains("mail") ? "" : oResult.Properties["mail"][0]) + " : " + (!oResult.Properties.Contains("department") ? "" : oResult.Properties["department"][0]) + "-" + (!oResult.Properties.Contains("company") ? "" : oResult.Properties["company"][0])); } Console.WriteLine(sw.ElapsedMilliseconds); Console.ReadKey(); } //second //LdapConnection ldapConnection = new LdapConnection("cn1.global.ctrip.com:636"); //var networkCredential = new NetworkCredential("FeebackEmailCheck", "O&xbu{c]=C"); //ldapConnection.SessionOptions.SecureSocketLayer = true; //ldapConnection.SessionOptions.VerifyServerCertificate += delegate { return true; }; //ldapConnection.AuthType = AuthType.Basic; //ldapConnection.Bind(networkCredential); //SearchRequest request = new SearchRequest("DC=xxx,DC=xxx,DC=xxx", "(sAMAccountName=3074861)", System.DirectoryServices.Protocols.SearchScope.Subtree); //SearchResponse response = (SearchResponse)ldapConnection.SendRequest(request); //if (response.Entries.Count == 1) //{ // SearchResultEntry entry = response.Entries[0]; // string DN = entry.DistinguishedName; //} //3rd: //LdapConnection conn = new LdapConnection("cn1.global.ctrip.com:636"); //var op = conn.SessionOptions; //op.ProtocolVersion = 3; //op.SecureSocketLayer = true; //op.VerifyServerCertificate += delegate { return true; }; //conn.AuthType = AuthType.Basic; //var cred = new NetworkCredential("FeebackEmailCheck", "O&xbu{c]=C"); ////conn.Credential = cred; //try //{ // conn.Bind(cred); // if (op.SecureSocketLayer) // { // Console.WriteLine("SSL for encryption is enabled - SSL information:"); // } //} //catch (Exception ex) //{ // throw; //} } }

  

原文地址:https://www.cnblogs.com/netact/p/5742244.html