【问题标题】:How to check whether user is domain administrator in c#如何在c#中检查用户是否是域管理员
【发布时间】:2011-10-02 22:44:38
【问题描述】:

我需要检查用户是否在域管理员组中,在 C# (.net 2.0) 中有一种简单的方法吗?

【问题讨论】:

    标签: c# active-directory dns administrator


    【解决方案1】:

    我觉得这段代码会对你有所帮助

    try
    {
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + userDomain, userName, password, AuthenticationTypes.Secure);
    if (IsDomainAdmin(entry, userName))
    {
    string fullUserName = userDomain + @"\" + userName;
    Console.WriteLine("user is administrator : " + fullUserName);
    //PrincipalContext context = new PrincipalContext(
    // ContextType.Domain, userDomain);
    //if (context.ValidateCredentials(fullUserName, password))
    //{
    // Console.WriteLine("Success!");
    //}
    }
    else
    Console.WriteLine("user is not administrator");
    }
    catch(Exception ex)
    {
    Console.WriteLine("invalid username or password, can't authenticate");
    }
    Console.ReadLine();
    }
    
    public static bool IsDomainAdmin(DirectoryEntry entry, string userName)
    {
    string adminDn = GetAdminDn(entry);
    if (!isUserFound(entry, adminDn, userName))
    {
    string adUser = GetAdministratorsDN(entry);
    return isUserFound(entry, adUser, userName);
    }
    return true;
    }
    
    private static bool isUserFound(DirectoryEntry entry, string adminDN, string userName)
    {
    SearchResult result = (new DirectorySearcher(
    entry,
    "(&(objectCategory=user)(samAccountName=" + userName + "))",
    new[] { "memberOf" })).FindOne();
    return result.Properties["memberOf"].Contains(adminDN);
    }
    
    public static string GetAdminDn(DirectoryEntry entry)
    {
    return (string)(new DirectorySearcher(
    entry,
    "(&(objectCategory=group)(cn=Domain Admins))")
    .FindOne().Properties["distinguishedname"][0]);
    }
    
    public static string GetAdministratorsDN(DirectoryEntry entry)
    {
    return (string)(new DirectorySearcher(
    entry,
    "(&(objectCategory=group)(cn=Administrators))")
    .FindOne().Properties["distinguishedname"][0]);
    }
    }
    

    如果您有任何疑问,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多