Проверка подлинности с помощью Active Directory - протокол LDAP
Мне нужно создать веб-страницу, которая аутентифицирует пользователей по существующему активному каталогу. Домен на самом деле представляет собой конфигурацию облачных вычислений, где в стеке находятся контроллер домена и несколько других серверов.
Я понимаю, что объекты из пространства имен System.DirectoryServices могут быть использованы. Тем не менее, я не могу найти путь к коду к активному каталогу через адрес LDAP://domain.com. Кажется, не происходит никакого общения. Я подозреваю, что требуется некоторая начальная конфигурация или меры безопасности, блокирующие связь.
Я работаю с этим примером из MSDN: http://msdn.microsoft.com/en-us/library/ms180890(v=vs.80).aspx.
Я получаю сообщение об ошибке, в котором говорится, что сервер не работает.
3 ответа
Посмотрите на эту ссылку (заменил старую на web.archive.org):
http://web.archive.org/web/20110317102802/http://www.codeproject.com/KB/system/everythingInAD.aspx
Вот как получить запись по умолчанию:
try
{
System.DirectoryServices.DirectoryEntry AdRootDSE = new System.DirectoryServices.DirectoryEntry("LDAP://rootDSE");
string rootdse = System.Convert.ToString(AdRootDSE.Properties["defaultNamingContext"].Value);
if (!rootdse.StartsWith("LDAP://", StringComparison.OrdinalIgnoreCase) && !rootdse.StartsWith("LDAPS://", StringComparison.OrdinalIgnoreCase))
{
rootdse = "LDAP://" + rootdse;
}
return rootdse;
}
catch (Exception ex)
{
}
Это было какое-то время, но я думаю, что достигну именно этого вопроса.
Я протестировал этот великолепный бесплатный сервер LDAP для тестирования
var path = "LDAP://ldap.forumsys.com:389/dc=example,dc=com";
var user = $@"uid={username},dc=example,dc=com";
var pass = "password";
var directoryEntry = new DirectoryEntry(path, user, pass, AuthenticationTypes.None);
var searcher = new DirectorySearcher(directoryEntry);
searcher.PropertiesToLoad.Add("*");
var searchResult = searcher.FindOne();
Однако я не совсем понимаю, что делают все эти строки, и, ища решение, я нашел несколько рекомендаций.
по пути строка "LDAP://" должна быть в блоке mayus.
у пользователя иногда нужно использовать "cn=username-admin" для проверки администраторов, также обязательно установите тип аутентификации на ServerBind.
LDAP://domain
может использоваться, когда сервер присоединен к указанному домену; Затем он должен иметь возможность разрешить контроллер домена при правильной конфигурации DNS.
В противном случае, если у вас есть fqdn или ip-адрес контроллера домена, вы можете использовать
LDAP://fqdn.of.domaincontroller /* or */ LDAP://100.10.100.10
Это означает, что вы привязаны к этому одному контроллеру домена, поэтому, если эта машина выйдет из строя или будет удалена, вы не сможете пройти аутентификацию.