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);
    }
    }
    }
  • 相关阅读:
    《软件测试经验与教训》—读书笔记
    【转】性能测试工程师的素质
    【转】如何成为优秀的性能测试工程师
    性能测试学习之路
    FTP 、TCP/IP、HTTP、Cookies、Session
    Loadrunner工具介绍
    tesseract-ocr图像识别技术(一)
    MongoDB 自动分片 auto sharding
    mongodb 3.0下载安装、配置及mongodb最新特性、基本命令教程详细介绍
    java使用memcached2--集群部署
  • 原文地址:https://www.cnblogs.com/eastson/p/3722053.html
Copyright © 2011-2022 走看看