รับรายชื่อผู้ใช้ทั้งหมดของ ActiveDirectoryGroup เฉพาะ

สวัสดี ฉันพยายามรับรายชื่อผู้ใช้ทั้งหมดของกลุ่ม ActiveDirectory Windows Authentication ได้รับการตั้งค่าอย่างถูกต้องและทำงานตามที่ตั้งใจไว้ ฉันยังสามารถจำกัดการดำเนินการของตัวควบคุมเฉพาะกลุ่มโฆษณา / บทบาทเฉพาะได้

อย่างไรก็ตาม ฉันไม่สามารถรับรายชื่อผู้ใช้ทั้งหมดของกลุ่ม AD ใดกลุ่มหนึ่งได้

ฉันลองในคอนโทรลเลอร์ของฉันดังนี้:

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

    return View();
}

ฉันพบคำตอบอื่น ๆ โดยใช้ตัวแปร UserManager ส่วนตัวหรือตัวแปรบริบท แต่ฉันไม่มีคำตอบเหล่านั้นในคอนโทรลเลอร์ และคำตอบอื่น ๆ ที่ฉันพบไม่ได้แสดงวิธีรับพวกมัน...

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก


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 "group name" | รับ-ADGroupMember | เลือก-Object samaccountname

person POD    schedule 16.10.2018