ActiveDirectoryのユーザ情報取得方法
ActiveDirectoryからユーザの所属部署情報を取得できません。
社内イントラネットのクライアントPC(Windows 7)上にASP.NETアプリ開発環境を作成、AcrtiveDirectory(AD)利用の社内イントラネットのためのASP.NETアプリを作成中です。解決できないところがあり、ご教授いただけますよう、よろしくお願いいたします。
【やりたいこと】
クライアントの所属部署に応じて、表示させるページを変えたい。
そのため、統合Windows認証にて、クライアントPCにてドメイン認証を受けたユーザのユーザ名を、User.Identity.nameにより取得後、ADに問合せ、ユーザの所属部署(department)情報を取得したい。
なお、User.Identity.nameにより、ユーザ名を取得できることは確認済です。
【開発・テスト環境】
・クライアントPCのWindows7にIISを設置し、本IIS上で、作成中のアプリケーションを動かしActiveDirectoryとの連携を含め動作を確認しようとしている。(アプリケーション完成後には、Windows Server 2008 R2に配置予定))
■IISにおける認証設定:Windows
■ASP.NETにおける認証設定:Windows
■ASP.NETの偽装設定:true(認証された一般ユーザに設定)
・開発ツール VWD2010
・開発言語 ASP.NET VisualBasic(Web Form利用)
【現象】
Web Formページ userdep.aspxの<script>タグ内に次のスクリプトを記述。
Dim uName As String = User.Identity.Name
Dim path As String = "LDAP=://LDAPserver_name/CN=Users, DC=XXX, DC=XXX, DC=jp"
Dim root As DirectoryEntry = New DirectoryEntry(path)
Dim schr As DirectorySearcher = New DirectorySearcher(root)
schr.Filter = String.Format("(&(objectClass=user)(name={0}))", uName)
Dim sr As SearchResult = schr.FindOne()
Dim userEntry = sr.GetDirectoryEntry()
Dim strdata As String = userEntry.Properties("department").Value
Label2.Text = uName
Label3.Text = strdata
userEntry.Close()
root.Close()
本ページを実行(http://localhost/xxx/userdep.aspxで呼び出し)すると、上記6行目(schr.FindOne()メソッド部分)で次のエラーが発生した。
=====エラー表示=====
不明なエラー (0x80005000)
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
例外の詳細: System.Runtime.InteropServices.COMException: 不明なエラー (0x80005000)
=====エラー表示終わり====
【推測】
Dim sr As SearchResult = schr.FindOne()の行にてエラーが表示されており、この部分は、ActiveDirectoryから情報を取得にいく部分かと思います。
AccessDirectoryにアクセスできていないようにも思えますが、ADへのアクセス権の問題でしょうか?
AccessDirectory側でなにか設定しなければならないことがあるのでしょうか?
開発環境(クライアントPC)では、IISおよびASP.NETにてWindows認証を設定し、ASP.NET偽装を設定していますので、認証されたユーザがActiveDirectoryのアクセストークンになると思っております。
なお、クライアントPCにてドメイン認証をうけたユーザIDは、普通のドメインユーザIDです。
考え違い等ありましたら、ご指摘よろしくお願いいたします。
お礼
回答有難う御座います。 アドバイス通りで出来ました! 有難う御座いました。