获取特定ActiveDirectoryGroup的所有用户的列表

时间:2018-10-16 14:37:21

标签: active-directory asp.net-core-2.0 windows-authentication user-roles

您好,我尝试获取ActiveDirectory组的所有用户的列表。 Windows身份验证已正确设置并按预期工作。我还可以将特定的控制器操作限制为特定的AD组/角色。

但是我无法获得特定AD组所有用户的简单列表。

我在控制器中尝试了以下方法:

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

    return View();
}

我使用一些私有UserManager变量或上下文变量找到了其他答案,但是我没有在控制器中找到它们,而我找到的其他答案也没有向我展示如何获取它们...

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

正如@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);
}

我希望这篇文章将来对其他人有帮助,这就是为什么我将其发布为答案。

答案 1 :(得分:0)

不太确定是否可以使用powershell来获取AD中的组列出的用户。--Get-ADGroup“组名” | Get-ADGroupMember |选择对象samaccountname