0

Windows 2003Server上にASP.NETWebサイトがあり、ネットワーク共有からファイルにアクセスする必要があります。ネットワーク共有はパスワードで保護されており、ユーザー名とパスワードを入力する必要があります。

私は、Windowsベースではなく、Webサイトでフォームベースの認証を使用しています。

したがって、私の問題は、以下のコードを使用してネットワーク共有からファイルを読み取ろうとすると、アクセスが拒否されたDirectoryInfo networkShare = new DirectoryInfo( "\\ TestServer \ Share");がスローされることです。

そこで、ネットワーク共有のユーザー名とパスワードを偽装関数呼び出しに提供して偽装を使用しようとしましたが、そのユーザー名がASP.NET Webサーバーに存在しないため、呼び出しは明らかに失敗します。そこで、Webサーバーに存在するログインのユーザー名とパスワードを渡したので、今回は偽装呼び出しは機能しますが、ネットワーク共有にアクセスできません。ネットワーク共有のユーザー名とパスワードが異なるためです。

最後に、ネットワーク共有と一致するまったく同じユーザー名/パスワードをWebサーバー上に作成しました。今回は偽装関数呼び出しが機能し、ネットワーク共有も機能します。共有から正常に読み取ることができます。

だから私の質問は、Webサーバーにユーザー名を追加せずにネットワーク共有を読み取る方法はありますか?「ネットワーク共有のログインが変更されるたびに、Webサーバーでも新しいユーザー名を作成する必要があります。これは理想的ではありません。

何か案は?

4

1 に答える 1

2

これを行う「正しい」方法は、共有にアクセスできるIDとしてWebサーバーのAppPoolを実行することです。これにより、(コードや読み取り可能な構成ファイルではなく)IIS構成で唯一の資格情報の保存が安全に行われます。Webサーバーとファイルサーバーを同じWindowsドメイン(または信頼できる別のドメイン)に配置するのが最も簡単な方法ですが、「同じユーザー名/パスワード」を使用することもできます。

コードまたは構成にユーザー名/パスワードを入れてもかまわない場合は、WNetAddConnection2にP / Invokeしてユーザー名/パスワードを渡すことができます。そうすると、共有にアクセスできるようになります。これには、Webサーバーが一致するアカウントを持っている必要はありませんが、実際にはパスワードを保護する必要があります(暗号化されたレジストリストレージについては、System.Security.Cryptography.ProtectedDataを調べてください)。

于 2009-09-30T04:32:07.657 に答える