Accesso all'ID dipendente tramite LDAP in un'applicazione ASP / VBScript classica
-
05-07-2019 - |
Domanda
Ho un'app ASP / VBScript precedente che sto gestendo / aggiornando e che attualmente sta utilizzando i mezzi più vecchi / deprecati per raccogliere informazioni sul profilo, come di seguito:
strNTUser = Request.ServerVariables("AUTH_USER")
strNTUser = replace(strNTUser, "\", "/")
Set strNTUserInfo = GetObject("WinNT://"+strNTUser)
'You get the idea'
Quando tutto ciò di cui avevo bisogno era il nome completo e la descrizione, questo andava bene. Ora ho bisogno di accedere ad alcune informazioni aggiuntive sul profilo, ma devo usare LDAP invece di WinNT. Ho fatto Google fino a quando non ero cieco, ma per la mia vita non riesco proprio a avvolgere il mio cervello nel collegarmi tramite LDAP e ottenere le informazioni di cui ho bisogno.
Cosa devo fare per ottenere il nome, il cognome e l'ID dipendente in base a AUTH_USER?
Aggiornamento : ho capito fin dall'inizio che sarebbero stati necessari ADSI o un'interfaccia simile, ma a quanto pare sono un ADIdiot e non ricevo alcun suggerimento utile - figuriamoci aiuto - da tutto quello che ho trovato su MSDN o TechNet. Un aiuto più esplicito sarebbe bello ...
Soluzione
Sono sicuro che probabilmente c'è un modo un po 'più efficiente per farlo, ma ecco il codice che ho finito per usare dopo molte ricerche, tentativi e digrignare i denti ...
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'
Accetterò felicemente qualsiasi codice refactored e un motivo per cui ora devo abbassare il sito a " Autenticazione di base " affinché funzioni.
Come nota a margine, ho provato a programmare il meno possibile il codice in modo da poterlo rispedire al progetto open source da cui ho ricevuto il codice originale.
Altri suggerimenti
È necessario utilizzare ADSI per connettersi al provider di directory ( LDAP) in questo caso. Ecco un esempio con ASP classico.