Спецификация поля ASP.NET Active Directory C # - PullRequest
3 голосов
/ 25 сентября 2011

У нас есть активный каталог здесь. предоставив уникальный идентификатор пользователя, мне нужно получить доступ к атрибуту организации-> менеджера-> имени, связанной с этим ИД пользователя. В основном это будет использоваться для отправки формы одобрения руководителю лица, отправляющего запрос.

Есть идеи, как это можно сделать?

Ответы [ 3 ]

3 голосов
/ 25 сентября 2011

Вы можете использовать следующий код:

/* Retreiving object from SID  
  */  
string SidLDAPURLForm = "LDAP://WM2008R2ENT:389/<SID={0}>";  
System.Security.Principal.SecurityIdentifier sidToFind = new System.Security.Principal.SecurityIdentifier("S-1-5-21-3115856885-816991240-3296679909-1106");  

/*
System.Security.Principal.NTAccount user = new System.Security.Principal.NTAccount("SomeUsername");
System.Security.Principal.SecurityIdentifier sidToFind = user.Translate(System.Security.Principal.SecurityIdentifier)
*/

DirectoryEntry userEntry = new DirectoryEntry(string.Format(SidLDAPURLForm, sidToFind.Value));  
string managerDn = userEntry.Properties["manager"].Value.ToString(); 

Но вы также можете найти в этом посте другие способы поиска привязки к Active-каталогу.

2 голосов
/ 25 сентября 2011

Поскольку вы работаете в .NET 3.5 и выше, вам следует проверить пространство имен System.DirectoryServices.AccountManagement (S.DS.AM).Прочитайте все об этом здесь:

По сути, вы можете определить контекст домена и легко находить пользователей и / или группы в AD:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

if(user != null)
{
   // do something here....     
}

// find the group in question
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere");

// if found....
if (group != null)
{
   // iterate over members
   foreach (Principal p in group.GetMembers())
   {
      Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName);
      // do whatever you need to do to those members
   }
}

Новый S.DS.AM позволяет действительно легкопоиграйтесь с пользователями и группами в AD!

Я не уверен на 100%, что вы хотите сделать в вашем конкретном случае ... UserPrincipal имеет свойство EmployeeId - это то, что вы хотитеискать?

0 голосов
/ 25 сентября 2011

Используйте класс System.DirectoryServices.DirectoryEntry для считывания соответствующего свойства объекта пользователя. Конструктор DirectoryEntry требует, чтобы у вас был путь LDAP к пользователю. Получить путь LDAP часто бывает сложно, поскольку IIS предпочитает передавать только имя учетной записи SAM. Если вы предоставите более подробную информацию о том, как выглядит ваш идентификатор пользователя, вам будет легче указать правильное направление.

Для этого учетной записи, которая запускает приложение ASP.NET, необходим доступ для чтения к AD, который, вероятно, не имеет по умолчанию. Изменение пула приложений для запуска под «NetworkService» - самый простой способ, если веб-сервер принадлежит AD. Затем приложение ASP.NET будет использовать учетную запись MACHINE $ сервера для доступа к AD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...