IIS8 (Windows サーバー 2012) で新しい asp.net サイトをセットアップしています。Windows Server 2008、IIS6 で動作する古いコードを使用しようとしています。どちらも仮想サーバーです。
Windows 認証が有効になっています。
匿名認証が無効になっています。(私が読んだいくつかの投稿ごとに有効にしようとしましたが、変更はありません)
次の方法でユーザーを取得します。
string user = System.Web.HttpContext.Current.User.Identity.Name;
int separatorIndex = user.LastIndexOf(@"\");
if (separatorIndex != -1 && separatorIndex < user.Length - 1)
{
user = user.Substring(separatorIndex + 1);
}
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://na.xxxxxx.biz");
DirectorySearcher directorySearcher = new DirectorySearcher(rootEntry);
directorySearcher.Filter = string.Format("(&(objectClass=user)(objectCategory=user) (sAMAccountName={0}))", user);
directorySearcher.PropertiesToLoad.Add("displayName");
var result = directorySearcher.FindOne();
これは localhost でうまく機能し、サーバーでエラーを返します。
System.DirectoryServices.DirectoryServicesCOMException (0x80072020): 操作エラーが発生しました。System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) で System.DirectoryServices.DirectoryEntry.Bind() で System.DirectoryServices.DirectoryEntry.get_AdsObject() で System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne) で System.DirectoryServices.DirectorySearcher .FindOne() at EngApps.App_Code.UserFullName.LookUpDirectory() in e:\inetpub\wwwroot\App_Code\UserFullName.cs:line 45
45 行目は、'FindOne()' を使用して上でポーズをとった最後の行です。
ユーザー名とパスワードをハードコーディングすると、サーバー上ですべてが機能します。
rootEntry.Username = user;
rootEntry.Password = "xxxxxx";
しかし、古いコード ベースではこれは必要ないので、IIS8 には設定があると思います。匿名認証を少しいじって、いくつかの投稿を読みましたが、まだ理解できていません。
ご協力いただきありがとうございます。