2012-09-17 2 views
0

Windows 인증 (C#)을 사용하는 웹 응용 프로그램이 있으며 현재 사용자를 개별적으로 역할에 할당합니다.Active Directory 그룹의 사용자에 대한 액세스를 설정하는 방법

나는 팀 전체에 응용 프로그램이 주 (결국 회사 전체)을 출시해야하는 것처럼 응용 프로그램의 각 페이지에, 나는, 나는 3000 PPL에 걸쳐 있기 때문에 사용자 AD 그룹에 필요

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

을 확인 그래서 저는 그것을 수동으로하지 않을 것입니다! ASP.NET에 초보자 (일반 프로그래밍)으로

와 정말 AD 그룹 설정에 대해 잘 모르는 (를 예를 들어 나는 등 내 응용 프로그램에서 AD 그룹에 접근하는 방법)을

누군가가 올바른 방향으로 나를 가리킬 수 있다면 나는 soooo 감사하게 될 것입니다 ... 나는 과 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> 

이 있고 나는 IIS 서버에서 Windows 인증 및 장애인 익명을 활성화했습니다.

제발 도와주세요 !!

+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

솔루션 : -

이것은 당신이

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

가한다고 가정 내 부서 OU에서 레코드를 가져 오려는 AD에 OU에서 그룹을 가져 오기 할 수있는 방법입니다

. 이제 경로가

학과 같은 것 - >> 사용자

직류 여기에 도메인 컨트롤러 이름은 당신이 할 수있는이 방법 Corp.Local
이었다 내 경우입니다 광고 그룹 가져 오기

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; 

사용자를 그룹에 추가하는 방법을 설명합니다.

단일 사용자의 예입니다. 사용자를 반복하여 비슷한 방식으로이 작업을 수행 할 수 있습니다.

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

방금 ​​내가 위의 코드 대신에 web.config 파일에서 System.Web.Security.WindowsTokenRoleProvider와 System.Web.Security.ActiveDirectoryMembershipProvider를 사용해야한다는 것을 깨달았습니다! –

관련 문제