Hola, trato de obtener una lista de todos los usuarios de un grupo de ActiveDirectory. La autenticación de Windows está configurada correctamente y funciona según lo previsto. También puedo restringir acciones específicas del controlador a grupos / roles específicos de AD.

Sin embargo, no puedo obtener una lista simple de todos los usuarios de un grupo de AD específico.

Probé en mi controlador lo siguiente:

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

    return View();
}

Encontré otras respuestas usando algunas variables privadas de UserManager o variables de contexto, sin embargo, no las tengo en mi controlador, y las otras respuestas que encontré, no me muestran cómo obtenerlas ...

Cualquier ayuda sería muy apreciada.

1
misanthrop 16 oct. 2018 a las 17:37

2 respuestas

La mejor respuesta

Como mencionó @Chris Pratt en su comentario, no hay forma de resolver este problema con asp.net core 2.0, pero hay una manera fácil de hacerlo con C #.

Entonces, lo que hice es muy simple, primero creé la siguiente clase (muy inspirada por: 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;
            }
        }
    }
}

Y ahora desde mi controlador simplemente hago lo siguiente:

[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);
}

Espero que esta publicación pueda ayudar a alguien más en el futuro, por eso la publiqué como respuesta.

1
misanthrop 17 oct. 2018 a las 06:22

No estoy muy seguro de si usar PowerShell sería una opción para obtener los usuarios enumerados de un grupo en AD --- Get-ADGroup "nombre de grupo" | Get-ADGroupMember | Seleccionar objeto samaccountname

0
POD 16 oct. 2018 a las 15:16