2

ADアカウント名を指定して、ユーザーが特定のグループのメンバーであるかどうかを確認する必要があるスタンドアロンアプリケーションを作成しています。アプリケーションを.NET(C#)で作成しています。ADの構造は次のようになります。

  • 組織
    • チーム1
      • デビッド(ユーザー)
  • グループ
    • アプリケーションA
      • チーム1 (上からのグループ)

Davidのメンバーシップをリストするだけでは、彼がApplicationAグループのメンバーであることは示されません。

Microsoftのドキュメントから、(プリンシパルを使用して)IsInRole呼び出しを使用するだけでよいことは理解していますが、Davidがマシンにログオンしたり、チェックを実行するアプリケーションを実行したりする必要のないケースは見つかりません。ここでは、セキュリティモデルについての私の限られた理解も関係していると思います。

誰かが私を正しい方向に向けてくれませんか?私が探しているのは、Davidがアプリケーションを実行する必要なしに、C#で上記を解決する方法のヒント(参照、ヒント、スニペット)です。

何か明確にできることがあれば教えてください。

4

3 に答える 3

3

DirectoryServices.AccountManagementへの参照を追加します

次に、usingステートメントを追加します。

using System.DirectoryServices.AccountManagement;

次に、メインプロシージャ(または必要に応じて他の場所)で、プロシージャIsMemberを呼び出します。

string userName = "David";
string GroupName = "Team 1";
bool test = IsMember(userName, GroupName);

    public static bool IsMember(string UserName, string GroupName)
    {
        try
        {
            UserPrincipal user = UserPrincipal.FindByIdentity(
                new PrincipalContext(ContextType.Domain),
                UserName);

            foreach (Principal result in user.GetAuthorizationGroups())
            {
                if (string.Compare(result.Name, GroupName, true) == 0)
                    return true;
            }
            return false;
        }
        catch (Exception E)
        { 
            throw E; 
        }
    }

Davidがチーム1にいる場合、プロシージャはtrueを返し、そうでない場合はfalseを返します。

于 2012-10-01T20:46:56.673 に答える
1

ディレクトリからオブジェクトUserPrincipal.FindByIdentityを取得するために使用できます。UserPrincipalこれは、見つけた他の主要なオブジェクトとまったく同じではありませんが、IsMemberOfグループメンバーシップを照会できるようにするメソッドがあります。

于 2012-09-28T06:40:40.397 に答える
0

AD環境でこれを使用します

var pc = new PrincipalContext(ContextType.Domain);
var group = GroupPrincipal.FindByIdentity(pc, "GROUPNAME");
var existsInGroup = group.GetMembers(true).Where(p => p.UserPrincipalName == "username@domain").Any();

サブグループを確認したくない場合は、に渡しfalseてくださいGetMembers

特定のユーザーがログオンする必要はありません。それが役に立てば幸い。

于 2012-09-28T07:08:50.357 に答える