Пользовательские группы AD не возвращаются при развертывании в IIS - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу авторизовать страницу в C# веб-приложении. Эта страница должна быть доступна только пользователям в определенной группе 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;
}

Я сослался на множество ответов в Интернете. Но не смог найти правильного решения. Любая помощь или руководство будет высоко ценится.

1 Ответ

0 голосов
/ 21 апреля 2020

Убедитесь, что вы включили windows аутентификацию в iis на уровне сайта, а остальные отключены:

enter image description here

Откройте «Редактор конфигурации» »Для вашего приложения / сайта.

enter image description here

Перейдите в раздел« system.web / authentication »в Редакторе конфигурации.

enter image description here

Установите для «режима» аутентификации значение «Windows» и сохраните изменения.

enter image description here

Перезапустите 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

...