C#代码登录活动目录

代码
using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;

namespace ChangeControlApp
{
    
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, domainAndUsername, 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.PropertiesToLoad.Add(
"memberOf");
            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();
        }

    }
}
ad path 传值类似:LDAP://Asia2.ccb2.com

 

posted @ 2010-07-23 11:42  pot  阅读(695)  评论(0编辑  收藏  举报