2012-09-17 3 views
0

J'ai une application Web utilisant Windows Authentification en C# et j'affecte actuellement les utilisateurs aux rôles individuellement.Comment configurer l'accès pour les utilisateurs du groupe Active Directory

par exemple. A chaque page de l'application, je vérifie

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

Comme je l'ai besoin de déployer l'application à toute l'équipe cette semaine (et éventuellement l'ensemble de l'entreprise), je dois groupes AD utilisateur car il y a plus de 3000 ppl donc je ne suis pas sur le point de le faire manuellement!

En tant que débutant à ASP.NET (et la programmation en général) et je ne sais vraiment pas beaucoup sur la mise en place des groupes AD (par exemple, comment puis-je obtenir l'accès aux groupes AD de ma demande, etc?)

Je serais tellement reconnaissant si quelqu'un peut me pointer dans la bonne direction ... J'ai lu tout sur LDAP et System.DirectoryServices.AccountManagement etc mais je suis juste d'autant plus confus.

Jusqu'à présent, j'ai dans mon 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> 

Et j'ai activé l'authentification Windows et désactivé Anonymous dans le serveur IIS.

S'il vous plaît, s'il vous plaît, aidez !!

+0

Je soupçonne que ce fil (http://stackoverflow.com/questions/2188954/see-if-user-is-part-of-active-directory-group-in-c-sharp-asp-net) serait utile mais je ne sais pas comment incorporer les codes dans mon application ... –

+0

Voulez-vous ajouter un nouveau groupe et ajouter des personnes aux groupes? – RL89

+0

Non, je veux utiliser le groupe Active Directory existant de l'entreprise! –

Répondre

1

Solutions: -

Voici comment vous pouvez extraire des groupes d'une unité d'organisation dans AD

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

Supposons que je veuille aller chercher des dossiers de mon ministère OU. Maintenant, le chemin serait comme

Département - >> Les utilisateurs

et dc ici est le nom du contrôleur de domaine, Dans mon cas, il était Corp.Local
De cette façon, vous pouvez récupérer des groupes à partir de votre 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; 

Maintenant, comment ajouter des utilisateurs aux groupes.

C'est un exemple pour un seul utilisateur, vous pouvez le faire de manière similaire en bouclant les utilisateurs.

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

une autre question si vous pouviez m'aider avec! J'ai seulement utilisé la première partie de votre code (c'est-à-dire vérifier si connecté une partie utilisateur d'un groupe AD spécifique). Maintenant, si l'utilisateur fait partie de ce groupe AD, je veux leur permettre d'avoir certains droits de sécurité sur l'application. J'ai créé un utilisateur fictif assigné avec des rôles que je veux que chacun des membres du groupe AD ait. Comment autoriser l'utilisateur à "hériter" des droits de sécurité d'un utilisateur fictif? –

+0

fondamentalement, je veux juste que ces parties du groupe AD aient certains droits de sécurité (au lieu d'ajouter chaque utilisateur aux droits de sécurité individuels). –

+0

Je viens de réaliser que j'aurais dû utiliser System.Web.Security.WindowsTokenRoleProvider et System.Web.Security.ActiveDirectoryMembershipProvider dans le fichier web.config tout au long (au lieu des codes ci-dessus)! –

Questions connexes