0

我想在 C# Web 应用程序中授权页面。此页面只能由特定 AD 组中的用户访问。我有以下代码,当我在调试模式(IIS Express)下运行它时它工作得很好。但是当我将它部署到我的本地 IIS 时,它并没有按预期工作。(总是返回用户组NULL)。

public static List<string> GetAdGroupsForUser(string userName, string domainName = null)
{
   var result = new List<string>();

   if (userName.Contains('\\') || userName.Contains('/'))
   {
       domainName = userName.Split(new char[] { '\\', '/' })[0];
       userName = userName.Split(new char[] { '\\', '/' })[1];
   }

   using (PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domainName, userName, "password"))
   using (UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, userName))
   using (var searcher = new DirectorySearcher(new DirectoryEntry("LDAP://" + domainContext.Name)))
   {
       searcher.Filter = String.Format("(&(objectCategory=group)(member={0}))", user.DistinguishedName);
       searcher.SearchScope = SearchScope.Subtree;
       searcher.PropertiesToLoad.Add("cn");

       foreach (SearchResult entry in searcher.FindAll())
          if (entry.Properties.Contains("cn"))
             result.Add(entry.Properties["cn"][0].ToString());
    }

    return result;
}

我在网上参考了很多答案。但找不到合适的解决方案。任何帮助或领导将不胜感激。

4

1 回答 1

0

确保您在站点级别的 iis 中启用了 Windows 身份验证,其余的被禁用:

在此处输入图像描述

打开您的应用程序/站点的“配置编辑器”。

在此处输入图像描述

导航到配置编辑器中的“system.web/authentication”部分。

在此处输入图像描述

将身份验证“模式”设置为“Windows”并保存更改。

在此处输入图像描述

重新启动 IIS 以确保应用您的更改,然后测试访问权限——只有属于允许组的用户才能访问。

你也可以试试下面的代码:

public bool AuthenticateGroup(string userName, string password, string domain, string group)
    {


        if (userName == "" || password == "")
        {
            return false;
        }

        try
        {
            DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, userName, password);
            DirectorySearcher mySearcher = new DirectorySearcher(entry);
            mySearcher.Filter = "(&(objectClass=user)(|(cn=" + userName + ")(sAMAccountName=" + userName + ")))";
            SearchResult result = mySearcher.FindOne();

            foreach (string GroupPath in result.Properties["memberOf"])
            {
                if (GroupPath.Contains(group))
                {
                    return true;
                }
            }
        }
        catch (DirectoryServicesCOMException)
        {
        }
        return false;
    }

您可以参考以下链接了解更多详情:

https://serverfault.com/questions/352647/restrict-access-to-iis-site-to-an-ad-group

https://forums.iis.net/t/1226581.aspx

https://forums.asp.net/t/2152453.aspx?Using+AD+groups+to+authorise+access+to+pages+using+IIS+Windows+Authentication+ASP+NET+Core+2+1

于 2020-04-21T02:27:24.553 回答