QA@IT

ActiveDirectoryからの情報取得

3879 PV

お世話になります。
WEBアプリのActiveDirectoryからの情報取得について教えてください。

≪ 前提 ≫
(1)サーバにIISを立てて匿名認証で、WEBアプリを配置しています。
   それに対して改造を行い、認証方法をWindows認証に変更します。
(2)また、アクセスしてきたユーザの情報をActiveDirectoryから取得して
   画面に表示させるように改造します。

≪ エラー ≫
クライアントからWEBアプリのURLにアクセスすると、トップページにADserverから取得した項目を
表示させます。
開発環境では、クライアントOSにログインしたIDのAD情報が取得できます。
本番環境では、クライアントからアクセスした際、「ローカルエラーが発生
しました」というメッセージが表示されます。

エラーメッセージが上記のみ表示される状況でして、調査に難航しております。
どのような原因が考えられるのでしょうか?
環境の確認した方が良いところ等、教えてください。

≪ 開発環境 ≫
○開発言語
Visual Studio 2008 C#.NET
SQLServer 2005
○サーバ
WindowsServer2008 Standard
IIS7.0
○ADServer
ActiveDirectoryServer Windows2003
○クライアント
WindowsXP
IE6

≪ 本番環境 ≫
○サーバ
WindowsServer2008 Standard
IIS7.0
SQLServer 2005
※ファイアーウォールとプロキシは無効にしています。
○ADserver
ActiveDirectoryServer Windows2000 OR 2003
○クライアント
WindowsXP
IE6

≪ 接続先 ≫

≪ C#コード ≫※関係の無いロジックは省略しています。
// AD用
private UserInfo GetAdInfo(UserInfo userInfo)
{

if (userInfo.AdInfo == null)
{
    userInfo.AdInfo = new ActiveDirectoryInfo();
}

// AD接続先
String adPath = System.Configuration.ConfigurationManager.AppSettings["ADServer"].ToString();
// ADユーザ
String adUser = System.Configuration.ConfigurationManager.AppSettings["ADServerUserID"].ToString();
// ADパスワード
String adPassword = System.Configuration.ConfigurationManager.AppSettings["ADServerPass"].ToString();

DirectoryEntry drctEntry = new DirectoryEntry(adPath, adUser, adPassword);
drctEntry.AuthenticationType = AuthenticationTypes.FastBind;

try
{
    Object obj = drctEntry.NativeObject;
}
catch (Exception e)
{        
    userInfo.testLog += " 接続失敗: Message" + e.Message + " / StackTrace : " + e.StackTrace + " / TargetSite : " + e.TargetSite
        + " / InnerException : " + e.InnerException + " / Data : " + e.Data + " / HelpLink : " + e.HelpLink + " / Source : " + e.Source;

    return null;
}
SearchResult sr = null;
try
{
    // LDAP検索オブジェクトを作成
    DirectorySearcher drSearch = new DirectorySearcher(drctEntry);
    drSearch.Filter = "((SAMAccountName=" + userInfo.UserId + "))";

    // 指定した条件で検索する
    sr = drSearch.FindOne();
}
catch
{
}
// 対象ユーザ無
if (sr == null)
{
    userInfo.testLog += "対象ユーザ無 / ";
    return null;
}

try
{
    userInfo.AdInfo.Sn = (string)sr.Properties["sn"][0];                            // 姓
    userInfo.AdInfo.GivenName = (string)sr.Properties["givenname"][0];              // 名
}
return userInfo;

}

ウォッチ

この質問への回答やコメントをメールでお知らせします。