我正在尝试使用具有完全访问权限以连接到Active Directory的服务帐户凭据连接到Active Directory,但是无法加载用户的属性详细信息。
当我使用“ miminstall”帐户登录时会发生这种情况,该帐户无权从AD提取用户详细信息,但是在我的应用程序中,我已传递了在AD中具有访问权限的帐户凭据。
当我以具有对Active Directory的完全连接访问权限的其他用户(adma)运行Visual Studio时,我可以连接并获取用户详细信息而没有任何问题。
即使在代码中传递了adma帐户凭据,我也不知道为什么会这样。
public string getADattributes(string DN, string operation)
{
string path = "LDAP://xyz.com";
DirectoryEntry directoryEntry = new DirectoryEntry(path, "xyz\\adma", "abc", AuthenticationTypes.Secure);
using (directoryEntry)
{
DirectorySearcher objDSearcher = new DirectorySearcher();
objDSearcher.Filter = "(distinguishedName=" + DN + ")";//search user in AD using DN
objDSearcher.PropertiesToLoad.Add("whenCreated");
objDSearcher.PropertiesToLoad.Add("whenChanged");
objDSearcher.PropertiesToLoad.Add("EmployeeID");
objDSearcher.SearchScope = SearchScope.Subtree;
SearchResult result = objDSearcher.FindOne();
if (result != null)//if count!=0 that means user exist in ad
{
string createdDate = "";
string modifiedDate = "";
string employeeID = "";
if (result.Properties["whenCreated"].Count >0)
{
//able to come inside if statement when running visual studio using adma account but not when runnning with login account i.e., miminstall
createdDate = result.Properties["whenCreated"][0].ToString();
}
if(result.Properties["whenChanged"].Count>0)
{
modifiedDate = result.Properties["whenChanged"][0].ToString();
}
if(result.Properties["EmployeeID"].Count > 0)
{
employeeID = result.Properties["EmployeeID"][0].ToString();
}
}
return null;
}
}
答案 0 :(得分:0)
除非这是一次性任务,否则通常会在任务计划程序或IIS下的Web应用程序中创建任务。
如果这是一个控制台应用程序,则在“任务计划程序”下添加一个新任务,设置操作以运行您的应用程序(将其路径指定为您应用程序的exe),并将任务用户设置为“ adma”
如果它是Web应用程序的一部分,请在IIS中创建一个新的应用程序池。然后右键单击新创建的应用程序池,转到“高级设置”>“身份”,并提供“ adma”的凭据。然后将此应用程序池分配给您的Web应用程序。
如果这不是预定任务或Web应用程序,并且偶尔会按需运行,那么我认为添加“模拟”将是您的最佳选择。看到这个SO