2013-08-21 4 views
2

У меня есть код, который проверяет Active Directory для всех групп, членом которых является пользователь, это прекрасно работает локально в моей среде разработки, но не при отправке в тестовую систему.Группы Active Directory не возвращаются

Один сожитель предположил, что, возможно, учетная запись, в которой работает пул приложений, находится в IIS, не в состоянии опросить Active Directory. Это будет так? Что может быть причиной того, что группы не будут возвращены?

Когда я запускаю свой код локально, я могу получить список, но Test возвращается пустым. Ошибок вообще нет.

Пример кода, где я могу изменить «LIVE» на «TEST», как у нас есть сеть с несколькими доменами, но ни работы:

UserPrincipal user = UserPrincipal.Current; 
if (user != null) 
{ 
    PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, "TEST"); 
    List<Principal> groupResults = user.GetGroups(principalContext).ToList(); 
} 
+0

Это может быть глупый вопрос, но вы абсолютно уверены, что на самом деле существуют группы в AD в тестовой среде? –

+0

Конечно, не глупый вопрос! Мой честный ответ: я не знаю, однако, поскольку я изменил Домен (при условии, что это действительно работает правильно), чтобы Live, и он все еще ничего не возвращал, и я знаю, что в системе Live AD есть группы, перечисленные под моим именем ... но если он завершит проверку учетной записи IIS, это будет другим вопросом. – MattR

+0

Это веб-приложение, которое выполняется в контексте пользователя NetworkService в IIS? Кроме того, знаете ли вы имя конкретного пользователя, для которого вы хотите найти группы? – Scampbell

ответ

2

Похоже, проблема связана с пользователем, с которым вы работаете, чтобы получить группы. UserPrincipal.Current получает учетную запись пользователя потока, в котором он работает. В приложении IIS этой учетной записи является учетная запись, указанная в идентификаторе пула приложений IIS приложения. Если вы хотите, чтобы найти группы Active Directory для конкретной учетной записи пользователя, чтобы получить группы, вы можете использовать этот код (.NET 4):

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "TEST");) 
{ 
    UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "A_User_Name"); 
    foreach (var group in user.GetGroups()) 
    { 
     Console.WriteLine(group.Name); 
    } 
} 

Если вы хотите сравнить результаты этого для пользователей и групп в конкретном домене, вы можете использовать этот инструмент: "Active Directory Users and Computers"

+0

Это, безусловно, было частью этого. Проблема, которую я могу увидеть после того, как конкретно установила имя пользователя, - это выбор другого домена, когда у меня есть ТЕСТ, у меня нет каких-либо разных результатов после добавления/удаления групп из моего имени. – MattR

+1

Вы пытались использовать эту утилиту «Пользователи и компьютеры Active Directory» для сравнения групп, возвращаемых для имени пользователя в каждом домене? Вы можете указать его для каждого домена отдельно и посмотреть группы, в которых пользователь, которого вы используете, является частью. – Scampbell

1

Если ASP.NET это должно работать:

public static List<string> GetGroups(string userName) 
    { 
     RoleProvider roleProvider = new WindowsTokenRoleProvider(); 
     return roleProvider.GetRolesForUser(userName).ToList(); 
    } 

Супер простой

1

Я не 100% уверен, но я думаю, что это намного проще, чем код:

UserPrincipal user = UserPrincipal.Current; 

if (user != null) 
{ 
    List<Principal> groupResults = user.GetGroups().ToList(); 
} 
Смежные вопросы