Question

J'ai une ancienne application ASP / VBScript que je gère / mets à jour et elle utilise actuellement les moyens plus anciens / dépréciés de collecte des informations de profil - comme ci-dessous:

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

Lorsque tout ce dont j'avais besoin était le nom complet et la description, tout allait bien. Maintenant, je dois accéder à des informations de profil supplémentaires, mais je dois utiliser LDAP au lieu de WinNT. Je suis allée sur Google depuis que j'étais aveugle, mais je n'arrive pas à comprendre pourquoi je me connecte via LDAP pour obtenir les informations dont j'ai besoin.

Que dois-je faire pour que le prénom, le nom de famille et l'ID d'employé soient basés sur AUTH_USER?

Mise à jour : Je pensais d'emblée qu'ADSI ou une interface similaire serait nécessaire, mais je suis apparemment un ADIdiot et je ne reçois aucun indice utile - sans parler de l'aide - de tout ce que j'ai trouvé sur MSDN ou TechNet. Une aide plus explicite serait bien ...

Était-ce utile?

La solution

Je suis sûr qu'il existe probablement un moyen un peu plus efficace de le faire, mais voici le code que j'ai utilisé après de nombreuses recherches, tentatives et grincements de dents ...

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'

J'accepterai volontiers tout code refactorisé et la raison pour laquelle je dois maintenant abaisser le site à "Authentification de base". pour que cela fonctionne.

En remarque, j'ai essayé de coder le moins possible en dur afin de pouvoir le renvoyer au projet open source d'où provient le code d'origine.

Autres conseils

Utilisez ADSI pour vous connecter au fournisseur de répertoires ( LDAP) dans ce cas. Voici un exemple avec un ASP classique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top