Получить клиенты текущего контроллера домена
Я пытаюсь получить контроллер домена, который клиентский компьютер ASP.NET
приложение подключено к использованию C#
,
Приложение представляет собой приложение для внутренней сети, которое никогда не будет подключено к Интернету, и каждый пользователь, использующий приложение, должен пройти проверку подлинности через Windows. Следовательно, это означает, что пользователь всегда будет подключен к контроллеру домена в нашей корпоративной сети.
Я попытался использовать следующий код, но он возвращает контроллер домена, к которому подключен сервер IIS:
using System.DirectoryServices;
public static string GetDC()
{
DirectoryEntry Entry = new DirectoryEntry("LDAP://rootDSE");
return Entry.Properties["dnsHostname"].Value.ToString();
}
Я прочитал несколько других вопросов по этому вопросу, которые, кажется, все производят контроллер домена серверов IIS.
У меня вопрос, возможно ли получить клиент подключенного контроллера домена и если да, то как?
1 ответ
Несколько вещей об аутентификации Active Directory:
- Пользователи не подключаются к контроллеру домена. Они проходят проверку подлинности в Active Directory, которая является распределенной службой, размещенной одним или несколькими контроллерами домена, которые реплицируют информацию между собой.
- Когда пользователь аутентифицируется веб-приложением, именно IIS выполняет аутентификацию. Выдается запрос 401, и компьютер пользователя предоставляет учетные данные в виде токена. Затем IIS использует этот токен для аутентификации, авторизации и идентификации пользователя.
- Пользователь веб-приложения, прошедший проверку подлинности Windows Authentication, представлен на сервере объектом WindowsIdentity. Объект WindowsIdentity содержит очень мало свойств, ни одно из которых не отображает основную информацию AD (кроме домена / имени пользователя).
- Клиентский код (AKA javascript) не будет иметь доступа к конфиденциальной информации AD на вашем компьютере. Это было бы очень плохо, если бы это произошло.
Если вам нужны подробности о том, как именно работает аутентификация в AD, посмотрите здесь: https://technet.microsoft.com/en-us/library/cc780332(v=ws.10).aspx
Теперь, если пользователи находятся в разных доменах, вы МОЖЕТЕ получить домен по имени пользователя и использовать его для поиска AD.
string userNameWithDomain = HttpContext.Current.User.Identity.Name; // returns SOMEDOMAIN\USERNAME
Вы разделяете на \ и берете первый элемент.