以下のコードは、Web アプリケーション localhost を実行すると正常に動作するのに、IIS サーバーにインストールするとうまく動作しないのはなぜですか?
using (HostingEnvironment.Impersonate())
{
UserPrincipal activeUser = UserPrincipal.Current;
String activeUserSid = activeUser.Sid.ToString();
String activeUserUPN = activeUser.UserPrincipalName;
}
HttpContext.Current.User
Active Directory への追加の呼び出しなしでは SID または UPN へのアクセスは提供されないため、私が固執することを提案しないでください。
Web アプリケーションは、3 つの別個のドメインの Windows 認証ユーザーによって使用され、Web サーバーは 4 番目のドメインでホストされます。アプリケーション プールはNetworkService
ID で実行するように構成されており、Web アプリ構成では ID の偽装が true に設定されています。
IIS で実行した場合のエラー メッセージは次のとおりです。
Page_Load() のエラー: UserPrincipal.Current.
System.InvalidCastException: タイプ 'System.DirectoryServices.AccountManagement.GroupPrincipal' のオブジェクトをタイプ 'System.DirectoryServices.AccountManagement.UserPrincipal' にキャストできません。
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity (PrincipalContext コンテキスト、IdentityType identityType、String identityValue)
で System.DirectoryServices.AccountManagement.UserPrincipal.get_Current()
で webapp.Details.Default.Page_Load (オブジェクト送信者、EventArgs e)
編集:次の両方を試してみましたが、残念ながら同じエラーが発生します。
UserPrincipal userPrincipal = UserPrincipal.Current;
Response.Write(userPrincipal.Name);
Principal userOrGroup = UserPrincipal.Current;
Response.Write(userOrGroup.Name);