Вопрос или проблема
Моя цель – бороться с настоящим монстром: у меня есть старая классическая ASP (Active Server Pages), и мне нужно интегрировать систему аутентификации с протоколом OpenLDAP.
Я не могу изменить платформу, потому что у меня нет времени.
Мой LDAP-адрес выглядит примерно так:
address ="158.207.207.24:389/ou=listaccount,o=contoso,c=com"
Я использую код, похожий на этот:
Set objConnection = Server.CreateObject("ADODB.Connection")
Set objCommand = Server.CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Searchscope") = 2 'ADS_SCOPE_SUBTREE
Set objRootDSE = GetObject("LDAP://" & address)
Я пытался перечислить свойства объекта objRootDSE
.
Response.Write("<p>Перечисление:</p>")
For Each obj in objRootDSE
Response.Write(obj.ADsPath + "<BR>")
netx
Где я получаю:
ADsPath: LDAP://158.207.207.24:389/ou=Office1,ou=listaccount,o=contoso,c=com
ADsPath: LDAP://158.207.207.24:389/ou=Office2,ou=listaccount,o=contoso,c=com
.....
ADsPath: LDAP://158.207.207.24:389/ou=Office30,ou=listaccount,o=contoso,c=com
Затем в этом фрагменте кода я получаю ошибку на Get(“defaultNamingContext”), которая не найдена.
strRootTDSE = objRootDSE.Get("defaultNamingContext")
Set objRootDSE = Nothing
objCommand.CommandText = _
"SELECT distinguishedName FROM 'LDAP://" & strRootTDSE & "' " & _
"WHERE objectCategory='user' AND sAMAccountName="" & UserToAuthenticate & """
Где я ошибаюсь?
Ответ или решение
Вопрос об интеграции аутентификации OpenLDAP с использованием Classic ASP – сложная задача, особенно учитывая устаревшую платформу и ограничения по времени. Ваша текущая попытка подключаться к OpenLDAP требует некоторых улучшений и исправлений. Давайте разберемся с тем, что вы делаете правильно и где возникают ошибки.
Шаг 1: Установка соединения с LDAP
Вы правильно начинаете с создания объектов ADODB.Connection
и ADODB.Command
. Однако, стоит учитывать, что для работы с OpenLDAP вам необходимо использовать правильный формат подключения. В случае использования OpenLDAP лучше заменить провайдер "Active Directory Provider" на более подходящий для LDAP, такой как "ADsDSOObject":
Set objConnection = Server.CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Шаг 2: Получение контекста корня
Ваш код для извлечения корневого контекста, где вы используете objRootDSE.Get("defaultNamingContext")
, не работает, потому что метод Get()
не находит defaultNamingContext
. Попробуйте использовать другой способ для получения контекста, например:
Set objRootDSE = GetObject("LDAP://" & address)
strRootTDSE = objRootDSE.distinguishedName
Шаг 3: Формирование запроса
Обратите внимание на синтаксис SQL-запроса к LDAP. Убедитесь, что вы корректно формируете строку. Запрос должен выглядеть следующим образом:
objCommand.CommandText = _
"SELECT distinguishedName FROM 'LDAP://" & strRootTDSE & "' " & _
"WHERE objectCategory='person' AND sAMAccountName='" & UserToAuthenticate & "'"
Здесь несколько важных моментов:
- Убедитесь, что вы используете правильное имя объекта: возможно, следует использовать
objectCategory='person'
вместоobjectCategory='user'
. - Убедитесь, что переменная
UserToAuthenticate
корректно инициализируется до выполнения запроса.
Шаг 4: Обработка ошибок и вывод результатов
После получения результатов запроса, вы должны обработать данные, а также учесть возможные ошибки. Например:
Set objRecordset = objCommand.Execute
If Not objRecordset.EOF Then
' Успешная аутентификация
Response.Write("Аутентификация прошла успешно!")
Else
' Не удалось аутентифицировать
Response.Write("Ошибка аутентификации.")
End If
Также обязательно добавьте обработку исключений для отлова ошибок соединения и выполнения команд.
Fine-Tuning и SEO
- Убедитесь, что код хорошо документирован, чтобы другие разработчики могли понять его.
- Используйте заголовки и мета-теги на странице для улучшения видимости в поисковых системах (например: “Аутентификация OpenLDAP с Classic ASP”).
- Сохраняйте код чистым и организованным для улучшения читаемости и поддержки.
Следуйте приведенным рекомендациям и проверьте код на наличие ошибок. Установка аутентификации через OpenLDAP в Classic ASP потребует ряда поправок, но при правильном подходе результаты будут положительными.