Получить список всех пользователей определенной ActiveDirectoryGroup

Привет, я пытаюсь получить список всех пользователей группы ActiveDirectory. Проверка подлинности Windows настроена правильно и работает должным образом. Я также могу ограничить определенные действия контроллера определенными группами/ролями AD.

Однако я не могу получить простой список всех пользователей определенной группы AD.

Я попробовал в своем контроллере следующее:

[HttpGet]
public async Task<IActionResult> Test()
{    
    string username = HttpContext.User.Identity...; //nothing to find in here

    return View();
}

Я нашел другие ответы, используя некоторые частные переменные UserManager или переменные контекста, однако у меня их нет в моем контроллере, а другие ответы, которые я нашел, не показывают мне, как их получить...

Любая помощь будет высоко ценится.


person misanthrop    schedule 16.10.2018    source источник
comment
Нет встроенного способа. Думайте о Windows Auth как о внешнем поставщике услуг входа, таком как Google или Facebook. Если вам нужна информация о наборе пользователей одновременно с любым из них, вам придется прибегнуть к использованию их API. Точно так же с Windows Auth вам нужно будет создать LDAP-соединение с вашим сервером AD и напрямую запрашивать информацию оттуда.   -  person Chris Pratt    schedule 16.10.2018
comment
Спасибо за быстрый ответ! Я не понимаю, почему эта функциональность не встроена, когда все остальное работает очень хорошо... Однако: есть ли хороший учебник для того, как вы описываете?   -  person misanthrop    schedule 16.10.2018
comment
Почему он должен быть встроенным? Это не имеет ничего общего с аутентификацией, которой занимается Windows Auth. Для общих информационных запросов AD является источником правды, так что вам нужно проконсультироваться с ним. Что касается учебников, просто выполните поиск. Здесь нет ничего конкретного для ASP.NET Core. Это просто LDAP, как и везде.   -  person Chris Pratt    schedule 16.10.2018
comment
@ChrisPratt Большое спасибо за этот комментарий. Теперь я понимаю, почему это не встроено, и я смог найти простое в реализации решение с небольшими исследованиями в Интернете!   -  person misanthrop    schedule 17.10.2018


Ответы (2)


Как упомянул @Chris Pratt в своем комментарии, нет способа решить эту проблему с asp.net core 2.0, но есть простой способ сделать это с помощью C #.

Итак, то, что я сделал, очень просто: сначала я создал следующий класс (сильно вдохновленный: https://stackoverflow.com/a/19604001/9641435)

using System.DirectoryServices.AccountManagement; //can be downloaded via NUGET Package manager
using System.Collections.Generic;

namespace MYNAMESPACE
{
    public static class ActiveDirectoryHelper
    {
        public static List<string> GetAllUserRealNamesFromAdGroup(string i_activeDirectyGroup)
        {
            var users = new List<string>();

            using (var context = new PrincipalContext(ContextType.Domain, "MY.DOMAIN.NAME"))
            {
                using (var group = GroupPrincipal.FindByIdentity(context, i_activeDirectyGroup))
                {
                    if (group != null)
                    {
                        var usersPrincipals = group.GetMembers(true);
                        foreach (UserPrincipal user in usersPrincipals)
                        {
                            //There are also other properties available, but in my case I just need the first and surname:
                            users.Add($"{user.GivenName} {user.Surname}");
                        }
                    }
                }
                return users;
            }
        }
    }
}

И теперь из моего контроллера я просто делаю следующее:

[HttpGet]
public IActionResult MyAction()
{
    var myVm = new MyViewModel();

    List<string> userList = ActiveDirectoryHelper.GetAllUserRealNamesFromAdGroup("MYGROUP"); 

    //do whatever you want with this list right here:


    return View(myVm);
}

Я надеюсь, что этот пост может помочь кому-то еще в будущем, поэтому я разместил его как ответ.

person misanthrop    schedule 17.10.2018

Не слишком уверен, что с помощью powershell вы сможете получить перечисленных пользователей группы в AD --- Get-ADGroup "имя группы" | Get-ADGroupMember | Select-Object samaccountname

person POD    schedule 16.10.2018