zoukankan      html  css  js  c++  java
  • 通过LDAP验证Active Directory服务

    原文地址:http://www.byywee.com/page/M0/S215/215725.html

    C#:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.DirectoryServices;
    using System.Configuration;
    using System.Text.RegularExpressions;
    
    
    
    namespace ldapcs
    {
        class Program
        {
            static void Main(string[] args)
            {
                string path = "LDAP://192.168.137.210:389/ou=pet,dc=abc,dc=com ";
                string username = "uname";
                string pwd = "upwd";
                string domain = "abc.com";
    
    
                LdapAuthentication ldap = new LdapAuthentication(path);
                Console.WriteLine( ldap.IsAuthenticated(domain, username, pwd));
                Console.WriteLine(ldap.GetGroups());
            }
    
            public class LdapAuthentication
            {
                private string _path;
                private string _filterAttribute;
    
                public LdapAuthentication(string path)
                {
                    _path = path;
                }
    
                public bool IsAuthenticated(string domain, string username, string pwd)
                {
                    string domainAndUsername = domain + @"" + username;
                    DirectoryEntry entry = new DirectoryEntry(_path, username, pwd);
    
                    try
                    {
                        //Bind to the native AdsObject to force authentication.
                        object obj = entry.NativeObject;
    
                        DirectorySearcher search = new DirectorySearcher(entry);
    
                        search.Filter = "(SAMAccountName=" + username + ")";
                        search.PropertiesToLoad.Add("cn");
                        SearchResult result = search.FindOne();
    
                        if (null == result)
                        {
                            return false;
                        }
    
                        //Update the new path to the user in the directory.
                        _path = result.Path;
                        _filterAttribute = (string)result.Properties["cn"][0];
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("Error authenticating user. " + ex.Message);
                    }
    
                    return true;
                }
    
                public string GetGroups()
                {
                    DirectorySearcher search = new DirectorySearcher(_path);
                    search.Filter = "(cn=" + _filterAttribute + ")";
                    //search.SearchRoot = "PET";
                    StringBuilder groupNames = new StringBuilder();
    
                    try
                    {
                        SearchResult result = search.FindOne();
                        int propertyCount = result.Properties["memberOf"].Count;
                        string dn;
                        int equalsIndex, commaIndex;
    
                        for (int propertyCounter = 0; propertyCounter < propertyCount; propertyCounter++)
                        {
                            dn = (string)result.Properties["memberOf"][propertyCounter];
                            equalsIndex = dn.IndexOf("=", 1);
                            commaIndex = dn.IndexOf(",", 1);
                            if (-1 == equalsIndex)
                            {
                                return null;
                            }
                            groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1));
                            groupNames.Append("|");
                        }
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("Error obtaining group names. " + ex.Message);
                    }
                    return groupNames.ToString();
                }
            }
    
    
    
            /// <summary>
            /// 验证AD用户是否登录成功
            /// </summary>
            /// <param name="domain"></param>
            /// <param name="userName"></param>
            /// <param name="password"></param>
            /// <returns></returns>
            public static bool TryAuthenticate(string domain, string userName, string password)
            {
                bool isLogin = false;
                try
                {
                    DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}", domain), userName, password);
                    entry.RefreshCache();
                    isLogin = true;
                }
                catch
                {
                    isLogin = false;
                }
                return isLogin;
            }
       }
    }


    Java:

    import java.util.Hashtable;
    import java.util.Enumeration;
    import javax.naming.Context;
    import javax.naming.NamingException;
    import javax.naming.directory.DirContext;
    import javax.naming.directory.InitialDirContext;
    import javax.naming.directory.SearchControls ;
    import javax.naming.NamingEnumeration;
    import javax.naming.directory.SearchResult;
    
    
    
    
    public class LDAPtest {
    
    
    public static void main(String[] args) {
        LDAPtest ldap=new LDAPtest();
    ldap.init();
    }
    public void init(){
    DirContext ctx = null;
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://192.168.137.210:389/");//连接LDAP的URL和端口
    
    
    //env.put(Context.SECURITY_AUTHENTICATION, "simple");//以simple方式发送
    env.put(Context.SECURITY_PRINCIPAL, "cn=uname,ou=PET,DC=abc,DC=com");//用户名
    env.put(Context.SECURITY_CREDENTIALS, "upwd");//密码
    String baseDN="ou=PET,DC=abc,DC=com";//查询区域
    String filter="(&(objectClass=person))";//条件查询
    
    try{
    ctx = new InitialDirContext(env);//连接LDAP服务器
    System.out.println("Success");
    SearchControls constraints = new SearchControls();//执行查询操作
    constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
    NamingEnumeration en=ctx.search(baseDN, filter, constraints); 
    if(en==null){
    System.out.println("There have no value");
    }else{
    while(en.hasMoreElements()){
    
    Object obj=en.nextElement();
    if(obj instanceof SearchResult){
    SearchResult sr=(SearchResult) obj;
    String cn=sr.getName();
    
    System.out.println("cccccc: "+cn);
    }
    }
    }
    
    }catch(javax.naming.AuthenticationException e){
    System.out.println(e.getMessage());
    }catch(Exception e){
    System.out.println("erro:"+e);
    }
    }
    }
  • 相关阅读:
    RE
    【LeetCode】198. House Robber
    【LeetCode】053. Maximum Subarray
    【LeetCode】152. Maximum Product Subarray
    【LeetCode】238.Product of Array Except Self
    【LeetCode】042 Trapping Rain Water
    【LeetCode】011 Container With Most Water
    【LeetCode】004. Median of Two Sorted Arrays
    【LeetCode】454 4Sum II
    【LeetCode】259 3Sum Smaller
  • 原文地址:https://www.cnblogs.com/eastson/p/3722053.html
Copyright © 2011-2022 走看看