しばらくの間、これに関する解決策を探していましたが、残念ながら各スレッドは行き止まりです。
私は、社内でのみ使用される C#/ASP.net Web アプリに取り組んでいます。IIS と web.config ファイルの両方で匿名アクセスが無効になっているため、IIS は Windows 認証ユーザー (Active Dir ユーザー) を使用する必要があります。
私の問題は、次のコードが完全に機能して、必要な (または任意の) AD ユーザーを取得することです。
using System.DirectoryServices.AccountManagement;
... other code ...
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain", "someADuser", "someADuserpassword");
UserPrincipal winuser = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "samaccountname");
上記の PrincipalContext で使用されている「someADuser」は、Windows から現在ログインしているユーザーであるため、認証済みで有効な AD ユーザーです。次のコードを (まったく同じユーザーがまだログインしている状態で) 使用すると、「ログオンに失敗しました: 不明なユーザー名またはパスワードが正しくありません」というエラーが表示されます。
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain");
UserPrincipal winuser = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "samaccountname");
PrincipalContext オブジェクトで指定されていない場合、UserPrincipal.FindByIdentity は何らかの理由でログインしているユーザーの検証済みの資格情報を使用していないようです。これはやりたくないことです。
必要な設定 (希望) が web.config に追加されていても、なんらかの理由で ctx がログインしている Windows ユーザーを取得していない可能性はありますか?
<authentication mode="Windows"/>
<authorization>
<deny users="?"/>
</authorization>
また、匿名アクセスは IIS で完全に無効になっていますか?