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 ...

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top