9

以下のコードは、Web アプリケーション localhost を実行すると正常に動作するのに、IIS サーバーにインストールするとうまく動作しないのはなぜですか?

using (HostingEnvironment.Impersonate())
{
    UserPrincipal activeUser = UserPrincipal.Current;
    String activeUserSid = activeUser.Sid.ToString();
    String activeUserUPN = activeUser.UserPrincipalName;
}

HttpContext.Current.UserActive Directory への追加の呼び出しなしでは SID または UPN へのアクセスは提供されないため、私が固執することを提案しないでください。

Web アプリケーションは、3 つの別個のドメインの Windows 認証ユーザーによって使用され、Web サーバーは 4 番目のドメインでホストされます。アプリケーション プールはNetworkServiceID で実行するように構成されており、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);
4

3 に答える 3

4

UserPrincipal.Current のデプロイで多くの問題が発生しましたが、その理由をまだ完全には理解していません。

最終的に PrincipalSearcher を使用することになり、次の関数を作成して、UserPrincipal.Current が行っていると思っていたことを実行しました。

private UserPrincipal GetActiveDirectoryUser(string userName)
{
    using(var ctx = new PrincipalContext(ContextType.Domain))
    using(var user = new UserPrincipal(ctx) { SamAccountName = userName})
    using(var searcher = new PrincipalSearcher(user))
    {
        return searcher.FindOne() as UserPrincipal;
    }
}

そして、System.Web.HttpContext.Current.User.Identity.Name をそのメソッドに userName として渡しました。

于 2014-01-13T19:32:02.743 に答える
2

ユーザーを特定するには、別の方法が必要なようです。
プロパティの msdn からの説明:
「スレッドが実行されている現在のユーザーを表すユーザー プリンシパル オブジェクトを取得します。」
したがって、UserPrincipal.Current は、IIS が実行されているユーザーを返します。

http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.userprincipal.aspx

于 2012-06-21T14:35:46.433 に答える