namespace SBTOSNew.Web.ADDomainService
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.ServiceModel.DomainServices.Hosting;
using System.ServiceModel.DomainServices.Server;
using System.DirectoryServices;
using System.Text;
using System.Security.Principal;
// TODO: Create methods containing your application logic.
[EnableClientAccess()]
public class ADHelper : DomainService
{
public string GetUserInfo( string ADPath, string ADUser, string ADPassword, string CurrentUserName)
{
DirectoryEntry objDirEnt = GetUser(ADPath, ADUser, ADPassword, CurrentUserName);
StringBuilder sbUserInfo = new StringBuilder();
if (objDirEnt != null )
{
sbUserInfo.Append( " Name = " + objDirEnt.Name + Environment.NewLine);
sbUserInfo.Append( " Path = " + objDirEnt.Path + Environment.NewLine);
sbUserInfo.Append( " SchemaClassName = " + objDirEnt.SchemaClassName + Environment.NewLine);
sbUserInfo.AppendFormat( " \t{0} = " , " memberOf " );
sbUserInfo.Append(Environment.NewLine);
foreach (var objValue in objDirEnt.Properties[ " memberOf " ])
{
sbUserInfo.AppendFormat( " \t\t{0} " + Environment.NewLine,GetGroupName(objValue.ToString()));
}
}
return sbUserInfo.ToString();
}
private DirectoryEntry GetUser( string ADPath, string ADUser, string ADPassword, string CurrentUserName)
{
DirectoryEntry de = GetDirectoryObject(ADPath, ADUser, ADPassword);
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = " (&(objectClass=user)(objectCategory=person)(sAMAccountName= " + CurrentUserName + " )) " ;
deSearch.SearchScope = SearchScope.Subtree;
SearchResult results = deSearch.FindOne();
if (results != null )
{
de = new DirectoryEntry(results.Path, ADUser, ADPassword, AuthenticationTypes.Secure);
return de;
}
else
{
return null ;
}
}
private DirectoryEntry GetDirectoryObject( string ADPath, string ADUser, string ADPassword)
{
DirectoryEntry oDE;
oDE = new DirectoryEntry(ADPath, ADUser, ADPassword, AuthenticationTypes.Secure);
return oDE;
}
private string GetGroupName( string objValue)
{
string groupName = "" ;
if (objValue == null || objValue.Trim() == "" )
{
groupName = "" ;
}
else
{
string [] groupInfo = objValue.Split( new char [] { ' , ' });
foreach ( string item in groupInfo)
{
if (item.StartsWith( " CN= " ))
{
groupName = item.Substring( 3 );
}
}
}
return groupName;
}
public string GetSystemUserInfo( string ADUser, string ADPassword)
{
GenericIdentity currentIdentity = GetGenericIdentity();
string identityName = currentIdentity.Name;
string identityAuthenticationType = currentIdentity.AuthenticationType;
string [] userinfo = identityName.Split( new char [] { ' \\ ' });
string ADPath = @" LDAP:// " + userinfo[ 0 ];
string CurrentUserName = userinfo[ 1 ];
DirectoryEntry objDirEnt = GetUser(ADPath, ADUser, ADPassword, CurrentUserName);
StringBuilder sbUserInfo = new StringBuilder();
if (objDirEnt != null )
{
sbUserInfo.Append( " Name = " + objDirEnt.Name + Environment.NewLine);
sbUserInfo.Append( " Path = " + objDirEnt.Path + Environment.NewLine);
sbUserInfo.Append( " SchemaClassName = " + objDirEnt.SchemaClassName + Environment.NewLine);
sbUserInfo.AppendFormat( " \t{0} = " , " memberOf " );
sbUserInfo.Append(Environment.NewLine);
foreach (var objValue in objDirEnt.Properties[ " memberOf " ])
{
sbUserInfo.AppendFormat( " \t\t{0} " + Environment.NewLine, GetGroupName(objValue.ToString()));
}
}
return sbUserInfo.ToString();
}
private GenericIdentity GetGenericIdentity()
{
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
string authenticationType = windowsIdentity.AuthenticationType;
string userName = windowsIdentity.Name;
GenericIdentity authenticatedGenericIdentity =
new GenericIdentity(userName, authenticationType);
return authenticatedGenericIdentity;
}
}
}
使用:
string
ADUser
=
txtUser.Text.Trim();
string ADPassword = txtPW.Password.Trim();
string ADPath = @" LDAP:// " + txtDomain.Text.Trim();
string CurrentUserName = txtCurrentUser.Text.Trim();
InvokeOperation < string > getUserInfo = adHelper.GetUserInfo(ADPath, ADUser, ADPassword, CurrentUserName);
getUserInfo.Completed += new EventHandler(getUserInfo_Completed);
string ADPassword = txtPW.Password.Trim();
string ADPath = @" LDAP:// " + txtDomain.Text.Trim();
string CurrentUserName = txtCurrentUser.Text.Trim();
InvokeOperation < string > getUserInfo = adHelper.GetUserInfo(ADPath, ADUser, ADPassword, CurrentUserName);
getUserInfo.Completed += new EventHandler(getUserInfo_Completed);