1

誰かが私にどのように説明できますか

  <identity impersonate="true" /> 

動作しますか?ユーザーがサーバー上のフォルダーを表示できるダイアログを備えたWebアプリケーションを作成しました。これは、更新パネルを使用してダイアログツリービューを更新することで機能します。基本的には、親ノード(サーバーフォルダーへのパスを持つ)を取得し、DirectoryInfoを使用してそのすべての子を取得します。次に、ユーザーが子をクリックすると、すべての子で更新されます。しかし、ここに問題があります。私がこのようなパスを持っている場合:

\ myServer \

ユーザーはに移動できます

\ myServer \ someFolder \

それで

\ myServer \ someFolder \ sharedFolderOnAnotherServer \

それで

\ myServer \ someFolder \ sharedFolderOnAnotherServer \ anotherFolder \

すべてが良いです。しかし、私が

\ myServer \ someFolder \ sharedFolderOnAnotherServer \

そして、子供に移動しようとすると、このエラーが発生します:

「使用されているアカウントはコンピューターアカウントです。このサーバーにアクセスするには、グローバルユーザーアカウントまたはローカルユーザーアカウントを使用してください。」

パスが示すように、フォルダー「sharedFolderOnAnotherServer」は、実際には別のサーバー上の共有フォルダーへのショートカットです。ルートから始めて最後のフォルダーに進むと、最初のサーバーからのアクセス許可が2番目のサーバーに引き継がれ、すべてが正常であるかのようになります。ただし、最初のサーバーをスキップして2番目のサーバーに直接移動すると、アクセス許可は引き継がれません。web.configファイルでimpersonateタグを使用すると、正常に機能しますが、現在ログインしているユーザーの取得とActiveDirectoryの使用に関して他の問題が発生します。最初から始めずに\myServer\ someFolder \ sharedFolderOnAnotherServer \ anotherFolder \パスに直接ジャンプできない理由と、なりすましが何をするのかを誰かが説明できますか?

4

1 に答える 1

1

なりすましを行わずに、Webサーバーは実行中のアプリケーションプールのIDを使用してリソースにアクセスします。偽装を使用する場合、Webサーバーは、認証されたユーザー(つまり、エンドユーザー)のIDを使用してリソースにアクセスします。つまり、Webサーバープロセスはエンドユーザーを「偽装」します。

Impersonate = trueを指定すると、Webサーバーはリクエスト全体に対してエンドユーザーを偽装します。よりきめ細かい制御が必要な場合の別のオプションは、コードで偽装を使用することです。

//Request uses application pool identity out here.
WindowsIdentity identity = (WindowsIdentity)HttpContext.Current.User.Identity;
if(identity != null)
{
    using(identity.Impersonate())
    {
        //Request uses end user identity to access resources here
    }
    //back to using application pool resources.
}

これは、Windows認証、またはHttpContext.Current.UserをWindowsPrincipalに設定する他の形式の認証を使用していることを前提としています。

于 2012-12-06T15:49:37.503 に答える