Доступ к идентификатору сотрудника через LDAP в классическом приложении ASP / VBScript

StackOverflow https://stackoverflow.com/questions/826862

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть старое приложение ASP / VBScript, которое я поддерживаю / обновляю, и в настоящее время оно использует устаревшие / устаревшие средства сбора информации профиля - как показано ниже:

strNTUser = Request.ServerVariables("AUTH_USER")
strNTUser = replace(strNTUser, "\", "/")
Set strNTUserInfo = GetObject("WinNT://"+strNTUser)
'You get the idea'

Когда все, что мне было нужно, это полное имя и описание, это было нормально. Теперь мне нужно получить доступ к некоторой дополнительной информации профиля, но мне нужно использовать LDAP вместо WinNT. Я работал в Google до тех пор, пока не ослеп, но, судя по всему, я просто не могу сосредоточиться на подключении через LDAP и получении необходимой информации.

Что мне нужно сделать, чтобы получить имя, фамилию и идентификатор сотрудника на основе AUTH_USER?

Обновление . С самого начала я рассчитывал, что потребуется ADSI или какой-либо подобный интерфейс, но я, очевидно, являюсь ADIdiot и не получаю никакой полезной подсказки - не говоря уже о помощи - из всего, что я нашел на MSDN или TechNet. Более точная помощь была бы хороша ...

Это было полезно?

Решение

Я уверен, что, возможно, есть немного более эффективный способ сделать это, но вот код, который я в конечном итоге использовал после долгих поисков, попыток и скрежета зубов ...

Dim strNTUser, strUser, strDN, strRootTDSE
Dim objRootDSE, objConnection, objCommand, objRecordSet, objUser, objNTUserInfo

strNTUser = Request.ServerVariables("AUTH_USER")
strUser = Mid(strNTUser,(instr(1,strNTUser,"\")+1),len(strNTUser))

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("Page Size") = 1000'
objCommand.Properties("Searchscope") = 2 'ADS_SCOPE_SUBTREE 

Set objRootDSE = GetObject("LDAP://rootDSE")
strRootTDSE = objRootDSE.Get("defaultNamingContext")
Set objRootDSE = Nothing

objCommand.CommandText = _
    "SELECT distinguishedName FROM 'LDAP://" & strRootTDSE & "' " & _
        "WHERE objectCategory='user' AND sAMAccountName = '" & strUser & "'" 

Set objRecordSet = objCommand.Execute

If Not objRecordSet.BOF Then objRecordSet.MoveFirst
If Not objRecordSet.EOF Then
    strDN = objRecordSet.Fields("distinguishedName").Value
End If

Set objConnection = Nothing
Set objCommand = Nothing
Set objRecordSet = Nothing

Set objUser = GetObject("LDAP://" & strDN)
'I can now use objUser to get the details'

Я с радостью приму любой рефакторинг кода и причину, по которой мне теперь нужно понизить сайт до «Базовая аутентификация». для того, чтобы это работало.

В качестве примечания я старался как можно меньше жестко программировать, чтобы я мог отправить его обратно в проект с открытым исходным кодом, из которого я получил исходный код.

Другие советы

Вы должны использовать ADSI для подключения к поставщику каталогов ( LDAP) в этом случае. Вот пример с классическим ASP.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top