偽装されたユーザーとのリモート共有を読み取ろうとしている ASP.NET Web アプリケーションがあります。具体的には、次のコードを使用してリモート共有上のディレクトリを読み取ろうとしています..
DirectoryInfo rootDir = new DirectoryInfo(strPath);
foreach (DirectoryInfo dir in rootDir.EnumerateDirectories())
{
TreeNode folderNode = new TreeNode(dir.Name, dir.FullName);
folderNode.PopulateOnDemand = true;
folderNode.ImageUrl = "~/img/Folder.png";
nodeList.Add(folderNode);
}
Web ページでこのコードを実行すると、次のエラー メッセージが表示されます...
パス '\remoteserver\remoteshare\' へのアクセスが拒否されました。
これが私のweb.configです...
<authentication mode="Windows"/>
<identity impersonate="true" />
<authorization>
<deny users="?"/>
</authorization>
Web サイトにログオンすると、HttpContext.Current.User.Identity.Name を実行して自分のユーザー名を確認できるため、なりすましが機能していることがわかります。IIS 7.5 のドメインでこのアプリケーションを実行しています。また、(Web サーバーから) リモート SQL サーバーに接続し、Windows 認証資格情報を問題なく渡し、クエリから結果を返すことができるため、これが Kerberos の「ダブルホップ」の問題ではないこともわかっています。
Web サーバーでProcess Monitorを使用して、どの資格情報がリモート共有に渡されているかを把握しています。ACCESS DENIED が表示されているキャプチャを見ると、この説明が表示されます...
必要なアクセス: データの読み取り/ディレクトリの一覧表示、同期、配置: 開く、オプション: ディレクトリ、同期 IO 非アラート、バックアップ用に開く、属性: n/a、ShareMode: 読み取り、書き込み、削除、AllocationSize: n/a、偽装: ドメイン\ユーザー名
DOMAIN\username は、Web サーバーから偽装したユーザー名です。
Process Monitor は、NT AUTHORITY\NETWORK SERVICE が要求を行っている Web サーバー上のユーザーであることも示しています。これにより、実際には、Web サーバーが偽装されたユーザーを渡してリモート ファイル共有を読み取ることはないと思われます。具体的には、リモート ファイル共有アクセスに「ダブル ホップ」の問題があるようです。
また、「このコンピューターをすべてのサービスへの委任に対して信頼する (Kerberos のみ)」ように Web サーバーを構成しました。繰り返しますが、Web サーバーからリモート SQL サーバーにアクセスできる場合、これはダブルホップの問題ではありませんか? 任意のヘルプまたはポインタをいただければ幸いです。2 日間かけて考えられる解決策を調べましたが、何も機能しません。