2009-05-05 20 views
4

私は以前のASP/VBScriptアプリケーションを保守/アップグレードしています。現在、古い/償却されたプロファイル情報を収集する手段を使用しています。従来のASP/VBScriptアプリケーションでLDAP経由で従業員IDにアクセスする

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

私が必要としていたのは完全な名前と説明でしたが、これは問題ありませんでした。これで追加のプロファイル情報にアクセスする必要がありますが、WinNTではなくLDAPを使用する必要があります。私は目が見えなくなるまで私はGoogleを使いましたが、私の人生では、私の頭脳をLDAP経由で接続し、必要な情報を得ることができないようです。

AUTH_USERに基づいて名字、姓名、従業員IDを取得するには、何が必要ですか?

更新:私はADSIまたはいくつかの同様のインタフェースが必要とされるであろうことを、最初から考え出したが、私は明らかにADIdiotだと有用なヒントになっていないのです - 私はMSDNやTechNetのを発見したものから - おろか助けを。より明示的なヘルプはうまくいくでしょう...

+0

4GuysFromRollaには、ADSI、LDAP、ASP用のコードサンプルがいくつかあるa pretty good articleがあります。 – Mxyzptlk

答えて

4

私はこれを行うには、もう少し効率的な方法は、おそらくあります確信しているが、ここで私がしようとし、後にずっと使って検索することになったコード、および歯ぎしりだ...

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' 

私はよ喜んでリファクタリングされたコードを受け入れるようになりました。これを実現するには、サイトを「基本認証」に下げる必要があります。

補足として、私はハードコードをできるだけ少なくしようとしました。私は元のコードを持っているオープンソースプロジェクトに戻すことができます。

1

この場合、ディレクトリプロバイダ(LDAP)に接続するには、ADSIを使用する必要があります。従来のASPのHere is an example

関連する問題