Pergunta

Eu tenho um aplicativo mais antigo ASP / VBScript que eu estou mantendo / modernização e sua atualmente utilizando os meios mais antigos / depreciado de recolha de informações de perfil - como abaixo:

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

Quando tudo que eu precisava era o nome completo e a descrição, isso foi bom. Agora eu preciso acessar algumas informações adicionais de perfil, mas eu preciso usar LDAP em vez de WinNT. Eu tenho Google'd até que eu era cego, mas para a vida de mim eu não consigo quebrar meu cérebro em torno de conectar via LDAP e recebendo a informação de que preciso.

O que eu preciso fazer para obter o Nome, Sobrenome, e Employee ID baseado no AUTH_USER?

Atualizar : Eu percebi desde o início que ADSI ou alguma interface semelhante seria necessária, mas eu sou aparentemente um ADIdiot e estou recebendo nenhuma dica útil - e muito menos ajuda - de qualquer coisa que eu encontrei em MSDN ou TechNet. ajuda mais explícita seria bom ...

Foi útil?

Solução

Eu tenho certeza que há provavelmente uma maneira pouco mais eficiente de fazer isso, mas aqui está o código que acabou usando depois de muita procura, tentando, e ranger de dentes ...

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'

Eu vou aceitar alegremente qualquer código refatorado, e uma razão pela qual eu tenho agora para diminuir o site para "autenticação básica" para que isso funcione.

Como uma nota lateral, eu tentei codificar tão pouco quanto possível para que eu possa enviá-lo de volta para o projeto de código aberto que eu tenho o código original de.

Outras dicas

Você deve usar ADSI para conectar-se ao provedor de diretório ( LDAP) neste caso. Aqui está um exemplo com o ASP clássico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top