2009-08-24 6 views
4

基本的に私は何かしようとしていますが、フォーム認証をいくつかのカスタムコードでActiveDirectoryにリンクするASP.Net Webアプリケーションがあります(thisと非常によく似ています)。C#ActiveDirectory LDAP Group Querying

ただし、ユーザーグループのドメインコントローラに照会するときは、明示的にサブグループではないグループのみが返されます(id est、ユーザーが所属する特定のセキュリティグループ、たとえばグループA、グループAのメンバーがグループBのメンバーであるため、ユーザーが明示的にグループAに属していて、グループBに暗黙のうちにいるだけです。

私はここで私を助けるかもしれないtokenGroupsクエリを読んだが、現在私はそのデータを解析する方法がありません。

しかし、LDAPクエリで特定のグループを渡して、そのユーザーがそのグループ内にいる場合は、ドメインコントローラにブール値(true/false)を渡すことができます。

提案がありますか?

答えて

4

「通常の」user.Properties["memberOf"]は直接メンバーシップのみを返します。

あなたはより現代的な「元本ベース」メソッドを使用することができ、しかし、.NET 3.5を使用している場合:

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) 
{ 
    using(Principal p = Principal.FindByIdentity(ctx, "yourUserName")) 
    { 
     var groups = p.GetGroups(); 

     using (groups) 
     { 
      foreach (Principal group in groups) 
      { 
       Console.WriteLine(group.SamAccountName + "-" + group.DisplayName); 
      } 
     } 
    } 
} 

この方法は、(「System.DirectoryServices.AccountManagement」アセンブリへの参照を追加ユーザーのプライマリグループとそのネストされたグループメンバシップも機能し、配信する必要があります。

.NET 2.0/3.0を使用していて、上に移動できない場合は、「tokenGroups」属性を読み取ってアプローチを使用することが最善のアプローチです。これをRyan Dunnの優れた方法ブログ投稿、Enumerating Token Groups (tokenGroups) in .NET

マーク

+0

tokenGroupsメソッドは完全に機能しました。残念ながら私たちは3.5ではないので、新しい方法を試すことはできませんが、tokenGroupsの設定に与えたリンクはうまくいきました。ありがとう。 –

+0

私は助けることができてうれしい、タイラー! –

関連する問題