2012-09-17 3 views
0

У меня есть веб-приложение с использованием Аутентификация Windows на C#, и в настоящее время я назначаю пользователям роли отдельно.Как настроить доступ для пользователей в группе Active Directory

например. На каждой странице приложения, я проверяю

if(Roles.IsUserInRole(AU\UserName, "PageAccessRole")) 

Как мне нужно раскатать приложение для всей команды на этой неделе (и в конечном итоге всю компанию), мне нужно групп пользователей AD, поскольку есть более 3000 госзакупках поэтому я не собираюсь делать это вручную!

Как новичок в ASP.NET (и программирования в целом), и я действительно много о создании групп AD не знаю (например, как я могу получить доступ к группам AD из моего приложения и т.д.?)

Я был бы так благодарен, если бы кто-нибудь мог указать мне в правильном направлении ... Я читал все о LDAP и System.DirectoryServices.AccountManagement и т. Д., Но я просто становлюсь все более запутанным.

До сих пор, у меня есть это в моем web.config

<authentication mode="Windows"> 
    </authentication> 
    <authorization> 
       <allow roles="AU\Active Directory Group Name"/> 
    <deny users="?"/> 
    </authorization> 

    <roleManager enabled="true" > 
    <providers> 
    <clear/> 
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
     </providers> 

И я включена проверка подлинности Windows и инвалидов Anonymous в IIS Server.

Пожалуйста, пожалуйста, помогите!

+0

Я подозреваю, что эта нить (http://stackoverflow.com/questions/2188954/see-if-user-is-part-of-active-directory-group-in-c-sharp-asp-net) было бы полезно, но я не знаю, как включить коды в мое приложение ... –

+0

Вы хотите добавить новую группу и добавить людей в группы? – RL89

+0

Нет, я хочу использовать существующую группу Active Directory компании! –

ответ

1

Solutions: -

Это, как вы можете получить группы из OU в AD

DataTable dt = new DataTable(); 
dt.Columns.Add("groups"); 
DirectoryEntry rootDSE = null; 

Предположим, я хочу получать записи из моего отдела OU. Теперь путь будет как то Департамент

- >> Пользователи

и постоянного здесь имя контроллера домена, в моем случае это был Corp.Local
Таким образом, вы можете извлечение групп из вашего AD

if (department != "") 
{ 
    rootDSE = new DirectoryEntry(
    "LDAP://OU=" + department + ",OU=Users,dc=corp,dc=local", username, password); 
} 
else 
{ 
    rootDSE = new DirectoryEntry(
     "LDAP://OU=Users,OU=" + ou + ",dc=corp,dc=local", username, password); 
} 
DirectorySearcher ouSearch = new DirectorySearcher(rootDSE); 
ouSearch.PageSize = 1001; 
ouSearch.Filter = "(objectClass=group)"; 
ouSearch.SearchScope = SearchScope.Subtree; 
ouSearch.PropertiesToLoad.Add("name"); 
SearchResultCollection allOUS = ouSearch.FindAll(); 
foreach (SearchResult oneResult in allOUS) 
{ 
    dt.Rows.Add(oneResult.Properties["name"][0].ToString()); 
} 
rootDSE.Dispose(); 
return dt; 

Теперь, как добавить пользователей в группы.

Это пример для одного пользователя, вы можете сделать это аналогичным образом, используя Looping the Users.

PrincipalContext pr = new PrincipalContext(ContextType.Domain, 
    "corp.local", "dc=corp,dc=local", username, password); 
GroupPrincipal group = GroupPrincipal.FindByIdentity(pr, groupName);//Looking for the Group in AD Server 

if (group == null) 
    { 
    //Throw Exception 
    } 

UserPrincipal user = UserPrincipal.FindByIdentity(pr, userName);//Looking for the User in AD Server 

if (user.IsMemberOf(group))//If Group is already added to the user 
    { 
     //I have Put it into If else condition because in case you want to Remove Groups from that User you can write your Logic here. 

    //Do Nothing, Because the group is already added to the user 
    } 
else// Group not found in the Current user,Add it 
    { 
     if (user != null & group != null) 
     { 
     group.Members.Add(user); 
     group.Save(); 
     done = user.IsMemberOf(group);//You can confirm it from here 
     } 
    } 
    pr.Dispose(); 
    return done; 
+0

другой вопрос, если бы вы могли мне помочь! Я использовал только первую часть вашего кода (т. е. проверял, зарегистрирован ли пользователь в части определенной группы AD). Теперь, если пользователь является частью этой группы AD, я хочу разрешить им иметь определенные права безопасности для приложения. Я создал фиктивного пользователя, которому назначены роли, которые мне нужны для каждой части группы AD. Как разрешить пользователю «наследовать» права безопасности от фиктивного пользователя? –

+0

В основном, я просто хочу, чтобы в той части группы AD были определенные права безопасности (вместо добавления каждого пользователя к отдельным правам безопасности). –

+0

Я только что понял, что должен был использовать System.Web.Security.WindowsTokenRoleProvider и System.Web.Security.ActiveDirectoryMembershipProvider в файле web.config все время (вместо приведенных выше кодов)! –

Смежные вопросы