
ASP.netをVS2008(言語はVB)で開発しています。ローカル(WinXP)ではAD情報が取得できるのに、
WindowsServer2008(IIS7.0)上で実行したらエラーになりました。
エラー内容:「操作エラーが発生しました」
場所 System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
-------------------------------------
コード:
Dim nameCheck As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name.ToString()
Dim serverPath As String = "LDAP://servername/DC=hogehoge,DC=local"
Dim entry As New System.DirectoryServices.DirectoryEntry(serverPath)
'ログオンユーザーを変数へ代入
Dim lgUser As String = Environment.UserName
Dim search As New System.DirectoryServices.DirectorySearcher()
' 検索のルートになるDirectoryEntryを指定
search.SearchRoot = entry
' 検索条件を指定します。下ではアカウント名と変数lgUserの一致が条件
search.Filter = "(samAccountName=" + lgUser + ")"
Dim result As System.DirectoryServices.SearchResult
result = search.FindOne
-------------------------------------
この↑FindOneでエラーになります。
lgUserにはユーザーID、
nameCheckにも、ドメイン名/ユーザーIDで、予定通りの値が取得出来ていることを確認しています
(※nameCheckはコード上必要ありませんが
思った通りの動きをしているか確認のため取得し、エラー時に表示して確認しました)
IIS7.0上では、IISマネージャを使用して、
「認証」で
・ASP.NET偽装
・Windows認証
を有効とし、他(フォーム認証、基本認証、匿名認証)はすべて無効にしています
lgUserにセットされる値はIDなので、
AD情報から、該当する人の名前と、メールアドレスを取得したいです。
(イントラネット上でデフォルト表示に使用します)
IIS7.0上で、ADに接続できるような設定が必要なのかな?と思っているのですが
具体的にどこをどうしたらよいのかわからず、途方に暮れています
こちらの情報が少ないようでしたら追加致します。
もう3日くらい詰まっているので、ヒントだけでも教えていただけると助かります。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
ただのユーザで偽装しているので、AD内オブジェクトの検索ができない(権限がない)のではないかと。
アプリケーションプールアカウントにそれなりの権限を付与し、偽装をやめて、操作者のユーザID 自体は My.User.Name で取得するか、
アプリケーションプールアカウントはデフォルトで、ADの検索する時だけコーディングで偽装するかでいけると思います。
早速の回答ありがとうございます!
別件でトラブルがあって、回答遅くなり、申し訳ありません。
下記手順で出来ました!
1.アプリケーションプールのIDがNetworkServiceだったので、ドメインのユーザーに変更。
2.ASP.NET偽装を無効。
3.操作者のユーザIDはMy.User.Nameで取得(¥を検索してユーザIDだけ取り出し)
AD内オブジェクトの検索をするときに、アプリケーションプールのIDを使わず、
Windows認証で取得したユーザー名(My.User.Name)で見てくれればいいのに...と思いましたが
パスワードの情報がないからNG...という認識は合っているのでしょうか??
「コーディングで偽装」をまだ試していないのですが
http://support.microsoft.com/kb/306158/ja#3
↑このあたりを参考にもう少しがんばってみようと思います
とりあえず教えていただいた一つの方法で実現できたので大変助かりました!
ありがとうございました<(_ _)>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
レコード登録時に「演算子があ...
-
ActiveCell.FormulaR1C1の変数
-
VBAでfunctionを利用しようとし...
-
【VBAエラー】Nextに対するFor...
-
On ErrorでエラーNoが0
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
ACCESSで値を代入できないとは?
-
エラーの種類
-
【Access】Excelインポート時に...
-
バッチファイルで、あるスクリ...
-
エクセル 足し算引き算で 空...
-
【VB.NET】 パワポ操作を非表示で
-
Excel ピボットテーブル平均・...
-
mailstorehomeのエクスポートで...
-
データベース操作時エラーについて
-
インポート時のエラー「データ...
-
VBA構文でコンパイルエラーの原...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
String""から型'Double'への変...
-
【Access】Excelインポート時に...
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
VBA エクセル で FIND でのエラ...
-
Filter関数を用いた結果、何も...
-
レコード登録時に「演算子があ...
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
実行時エラー 438 の解決策をお...
-
「実行時エラー '3167' レコー...
おすすめ情報