Dapatkan Daftar semua pengguna ActiveDirectoryGroup tertentu

Hai, saya mencoba mendapatkan Daftar semua pengguna Grup ActiveDirectory. Otentikasi Windows telah diatur dengan benar dan berfungsi sebagaimana mestinya. Saya juga dapat membatasi tindakan pengontrol tertentu untuk Grup/peran AD tertentu.

Namun saya tidak bisa mendapatkan daftar sederhana semua pengguna grup AD tertentu.

Saya mencoba di pengontrol saya sebagai berikut:

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

    return View();
}

Saya menemukan jawaban lain menggunakan beberapa variabel UserManager pribadi atau variabel konteks, namun saya tidak memilikinya di pengontrol saya, dan jawaban lain yang saya temukan, jangan tunjukkan cara mendapatkannya...

Bantuan apa pun akan sangat dihargai.


person misanthrop    schedule 16.10.2018    source sumber
comment
Tidak ada cara bawaan. Bayangkan Windows Auth pada dasarnya sebagai penyedia masuk eksternal, seperti Google atau Facebook. Jika Anda menginginkan informasi tentang sekelompok pengguna sekaligus dengan salah satu dari mereka, Anda harus menggunakan API mereka. Demikian pula, dengan Windows Auth, Anda harus membuat koneksi LDAP ke server AD dan langsung menanyakan informasi dari sana.   -  person Chris Pratt    schedule 16.10.2018
comment
Terima kasih atas balasan cepatnya! Saya tidak mengerti mengapa fungsi ini tidak ada di dalamnya, padahal yang lainnya berfungsi dengan sangat baik... Namun: apakah ada tutorial yang bagus untuk cara Anda menjelaskannya?   -  person misanthrop    schedule 16.10.2018
comment
Mengapa itu harus ada di dalamnya? Ini tidak ada hubungannya dengan otentikasi yang merupakan inti dari Windows Auth. Untuk pertanyaan informasi umum, AD adalah sumber kebenarannya, jadi itulah yang perlu Anda konsultasikan. Sejauh tutorialnya, lakukan saja pencarian. Tidak ada yang spesifik untuk ASP.NET Core di sini. Ini hanya LDAP, sama seperti yang Anda lakukan di mana pun.   -  person Chris Pratt    schedule 16.10.2018
comment
@ChrisPratt Terima kasih banyak atas komentar itu. Saya sekarang mengerti mengapa ini tidak ada di dalamnya dan saya dapat menemukan solusi yang mudah diterapkan hanya dengan sedikit riset di internet!   -  person misanthrop    schedule 17.10.2018


Jawaban (2)


Seperti yang disebutkan @Chris Pratt dalam komentarnya, tidak ada cara untuk menyelesaikan masalah ini dengan asp.net core 2.0, tetapi ada cara mudah, melakukannya dengan C#.

Jadi yang saya lakukan sangat sederhana, pertama saya membuat kelas berikut (sangat terinspirasi oleh: 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;
            }
        }
    }
}

Dan sekarang dari Controller saya, saya cukup melakukan hal berikut:

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

Saya harap postingan ini dapat membantu orang lain di masa mendatang, itulah mengapa saya mempostingnya sebagai jawaban.

person misanthrop    schedule 17.10.2018

Tidak terlalu yakin apakah menggunakan PowerShell akan menjadi pilihan bagi Anda untuk mendapatkan pengguna grup yang terdaftar di AD--- Get-ADGroup "group name" | Dapatkan-ADGroupMember | Pilih-Objek samanama akun

person POD    schedule 16.10.2018