如何为Active Directory组中的用户设置访问权限

时间:2012-09-17 05:56:36

标签: c# asp.net authentication active-directory

我在C#中使用 Windows身份验证创建了一个Web应用程序,目前我已将用户分配给角色。

e.g。在应用程序的每个页面上,我都会检查

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>

我在IIS服务器中启用了Windows身份验证并禁用了匿名。

请帮助!!

1 个答案:

答案 0 :(得分:1)

解决方案: -

这是您如何从AD中的OU获取组

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

假设我想从我的部门OU中提取记录。现在路径就像那样

<强>署 - &GT;&GT;用户

dc 这里是域名控制器名称,在我的情况下是 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;

现在如何将用户添加到群组。

这是单个用户的一个示例,您可以通过循环用户以类似的方式执行此操作。

 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;