c# - 从AD获取用户角色的简单方法?

标签 c# .net active-directory ldap

我正在编写一个独立的应用程序,需要在给定 AD 帐户名的情况下确定用户是否是特定组的成员。我正在用 .NET (C#) 编写应用程序。 AD中的结构如下所示:

  • 组织
    • 第 1 队
      • David (用户)
  • 群组
    • 应用A
      • 团队 1(上面的小组)

仅列出 David 的成员身份并不能表明他是应用程序 A 组的成员。

我从 Microsoft 的文档中了解到(使用主体)我可以简单地使用 IsInRole 调用,但我找不到任何不需要 David 登录到计算机或运行执行检查的应用程序的情况。我认为我对安全模型的有限理解也在这里发挥了作用。

有人能给我指出正确的方向吗?我正在寻找的是有关如何在 C# 中解决上述问题(引用、提示、片段)的提示,而无需依赖 David 运行任何应用程序。

如果有任何问题需要澄清,请告诉我。

最佳答案

添加对 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 在 Team 1,该过程将返回 true,否则返回 false。

关于c# - 从AD获取用户角色的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12634706/

相关文章:

c# - 有没有办法通过反射获取类型的别名?

.net - 修复 .NET 程序中的错误,无需访问源代码

.net - 设置 Forms ClientSize 会更改控件的位置

c# - 使用泛型解析json模型的转换器

asp-classic - 在经典 ASP 中更改事件目录密码

c# - 接口(interface)的默认实现是什么意思

c# - 更新 GAC dll

c# - 如何使折线图中的数据点可见?

active-directory - 如何在System.DirectoryServices.Protocols中放弃长时间运行的搜索

windows - 更新 AD 中的用户信息