.NET Framework 4 で Windows 認証を使用しているイントラネット ASP.NET MVC3 Web アプリケーションがあります。すべてのコードは、ユーザーの認証に関しては機能しています。ベースライン認証に Windows 認証を使用しており、Active Directory ユーザーを SQL Server 2008 のテーブル内のユーザーにリンクして、アプリケーションに固有の追加のユーザー プロパティを取得しています。そのすべてがうまく機能しています。
管理者が Active Directory ユーザーを選択して SQL ユーザー テーブル (上記参照) に追加し、サイト固有のプロパティ (IsAdmin、ShoeSize など) を入力できるサイトのセクションがあります。この画面には、作成したカスタム オブジェクトからすべての Active Directory を取得するために入力するドロップダウン リストがあります。このカスタム オブジェクトには、Active Directory ユーザーのユーザー名とフル ネームのプロパティのみが含まれています。そのためのこのコードは次のとおりです。
public IQueryable<ActiveDirectoryUser> ActiveDirectoryUsers
{
get
{
// get list of users in the Active Directory
DirectoryEntry dirEntry = new DirectoryEntry("WinNT://" + Environment.UserDomainName);
List<DirectoryEntry> activeDirectoryUsers = dirEntry.Children.Cast<DirectoryEntry>()
.Where(c => c.SchemaClassName == "User").ToList();
// populate a custom class I have to hold the active directory user's username and full name property values
return activeDirectoryUsers
.Where(u => !string.IsNullOrEmpty(u.Properties["FullName"].Value.ToString()))
.Select(u => new ActiveDirectoryUser()
{
NetworkId = String.Format(@"{0}\{1}", Environment.UserDomainName, u.Properties["Name"].Value),
FullName = u.Properties["FullName"].Value.ToString()
}).AsQueryable();
}
}
何らかの理由で、Web アプリケーションが IIS 7 にデプロイされている場合、このコードは結果を返しません。ただし、Visual Studio で IIS Express からサイトを実行している場合、これは完全に機能します。なぜこれが起こっているのかについてのアイデアはありますか?犯人として IIS 設定を探していましたが、役立つものは見つかりませんでした。Active Directory ユーザーを取得する方法を変更する必要がありますか? ありがとうございました!