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

 

你可能感兴趣的:(C#)