0

C# でWindows 認証を使用する Web アプリケーションがあり、現在、ユーザーを個別にロールに割り当てています。

例 アプリケーションの各ページで、チェックします

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

今週、アプリケーションをチーム全体 (最終的には会社全体) にロールアウトする必要があるため、3000 人を超えるユーザーが AD グループを使用する必要があるため、手動で行うつもりはありません!

ASP.NET (および一般的なプログラミング) の初心者であり、AD グループの設定についてはあまり知りません (たとえば、アプリケーションから AD グループにアクセスするにはどうすればよいでしょうか?)。

誰かが私を正しい方向に向けることができれば、とても感謝しています... LDAPSystem.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 認証を有効にし、匿名を無効にしました。

助けてください!!

4

1 に答える 1

1

ソリューション:-

これは、ADのOUからグループをフェッチする方法です。

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

部門OUからレコードをフェッチしたいとします。今、パスはそのようになります

部門->>ユーザー

ここでの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;
于 2012-09-19T09:03:25.763 に答える