WedX - журнал о программировании и компьютерных науках

Как проверить, является ли пользователь членом группы

Моя цель - проверить, является ли пользователь членом определенной группы Active Directory.

В .net mvc я использовал этот код внутри своей службы

HttpContext.Current.Request.LogonUserIdentity.Groups
                    .Any(x => x.Translate(typeof(NTAccount)).Value == "some role"

и это сработало хорошо. В .net core mvc 2.1.2 я передаю IHttpContextAccessor в конструктор службы и пытаюсь использовать следующие

_httpAccessor.HttpContext.User.Identity.LogonUserIdentity.Groups

но есть проблема, потому что Identity не содержит LogonUserIdentity. Я пытался найти какое-либо решение, но мне это не удалось, как я могу получить список групп пользователей или проверить, является ли пользователь членом определенной группы?


  • У него может не быть точного ответа, но вы видели и следовали этому руководству: Настроить проверку подлинности Windows в ASP.NET Core 07.11.2018
  • Это также может помочь: Аутентификация ASP.NET Core 2.0 LDAP Active Directory 07.11.2018
  • Спасибо, Питер, IIS уже настроен для аутентификации Windows, это работает. Второй подход использует прямое подключение к LDAP, но я пробовал его раньше, и он работает медленно. Я хотел бы использовать HTTP-контекст как и раньше. Я надеюсь, что функция была перемещена в другое место, и она не исчезла полностью. 07.11.2018
  • Я совсем забыл об этой функции _httpAccessor.HttpContext.User.IsInRole("role name") думаю, это то, что мне нужно. 07.11.2018
  • Поскольку группы AD добавляются как роли при использовании Windows Auth, да, это должно работать для проверки членства в группе. Просто помните о том, что на самом деле вы запрашиваете роли, а не группы непосредственно в AD. 07.11.2018
  • @Chris Pratt: я знаю, что входным параметром является имя роли, но если я передам полное имя группы активного каталога с именем домена, оно будет работать напрямую без дополнительной настройки. 08.11.2018

Ответы:


1

За исключением использования встроенной функции, которая проверяет разрешение по «Ролям», если вы хотите проверить определенную группу объявлений, вы также можете использовать следующие коды:

 public static class Security
{
    public static bool IsInGroup(this ClaimsPrincipal User, string GroupName)
    {
        var groups = new List<string>();

        var wi = (WindowsIdentity)User.Identity;
        if (wi.Groups != null)
        {
            foreach (var group in wi.Groups)
            {
                try
                {
                    groups.Add(group.Translate(typeof(NTAccount)).ToString());
                }
                catch (Exception)
                {
                    // ignored
                }
            }
            return groups.Contains(GroupName);
        }
        return false;
    }
}

И используя как:

 if (User.IsInGroup("GroupName"))
 {

 }
08.11.2018
  • Спасибо, _httpAccessor.HttpContext.User.IsInRole("<Domain>\\<SpecificGroupName>") тоже работает. 08.11.2018
  • Я создал группу в активном каталоге и добавил в нее своего текущего пользователя, но когда я перечисляю их, как будто эта группа не может быть найдена 21.05.2020
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: wedx@cp9.ru