Acceso a la identificación del empleado a través de LDAP en una aplicación clásica de ASP / VBScript

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Tengo una aplicación ASP / VBScript más antigua que estoy manteniendo / actualizando y actualmente está usando los medios más antiguos / depreciados para recopilar información de perfil, como a continuación:

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

Cuando todo lo que necesitaba era el nombre completo y la descripción, esto estaba bien. Ahora necesito acceder a información de perfil adicional, pero necesito usar LDAP en lugar de WinNT. Busqué en Google hasta que estuve ciego, pero por mi vida, parece que no puedo envolver mi cerebro con la conexión a través de LDAP y obtener la información que necesito.

¿Qué debo hacer para obtener el nombre, el apellido y la identificación del empleado en función del AUTH_USER?

Actualización : desde el principio pensé que se necesitaría ADSI o alguna interfaz similar, pero aparentemente soy un ADIdiot y no obtengo ninguna pista útil, y mucho menos ayuda, de todo lo que he encontrado en MSDN o TechNet. Más ayuda explícita sería agradable ...

¿Fue útil?

Solución

Estoy seguro de que probablemente haya una forma un poco más eficiente de hacer esto, pero aquí está el código que terminé usando después de mucho buscar, intentar y crujir los dientes ...

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'

Aceptaré con gusto cualquier código refactorizado, y una razón por la que ahora tengo que bajar el sitio a " Autenticación básica " para que esto funcione.

Como nota al margen, he intentado codificar lo menos posible para poder enviarlo al proyecto de código abierto del que obtuve el código original.

Otros consejos

Debe usar ADSI para conectarse al proveedor del directorio ( LDAP) en este caso. Aquí hay un ejemplo con ASP clásico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top