パスワード保護されたネットワーク共有からASP.NET読むファイル
-
19-09-2019 - |
質問
私は、ネットワーク共有からファイルにアクセスする必要があるのWindows 2003 Server上のASP.NETのウェブサイトを持っています。ネットワーク共有がパスワードで保護され、提供されるユーザ名とパスワードを必要とします。
私はWindowsベースのウェブサイト上で認証をベースのフォームを使用していない。
だから私の問題は、私は以下のコードを使用してnetworkshareから任意のファイルを読み込むしようとすると、それはアクセス拒否をスローし、あります DirectoryInfo networkShare =新DirectoryInfo( "\\ TESTSERVER \共有");
その名は、ASP.NETのWebサーバ上に存在しないため、だから私は偽装関数呼び出しにネットワーク共有のユーザー名とパスワードを提供することで、偽装を使用してみました、しかし、コールは明らかに失敗しました。それでは、私はWebサーバ上に存在しないログインのユーザ名とパスワードを渡されたので、この時間は、偽装の呼び出しは、しかし、それはまだ異なっているネットワーク共有のユーザー名とパスワードのcuzのネットワーク共有にアクセスすることはできません動作します。
最後に、私は、ネットワーク共有に一致するウェブサーバ上の正確な同じユーザー名/パスワードを作成しました。今回偽装関数呼び出しが動作しますので、ネットワーク共有を行います。私は正常に共有から読むことができますよ。
だから私の質問は、私がWebサーバにユーザ名を追加することなく、ネットワーク共有を読むことができる方法があります。 「Cuzの毎回ネットワーク共有ログインの変更は、私は再び、あまりにもウェブサーバに新しいユーザー名を作成する必要があります。これは理想的ではありません。
任意のアイデア?
解決
これを行うには「正しい」方法は、共有にアクセスすることができますアイデンティティとしてWebサーバのアプリケーションプールを実行することです。その方法は、唯一の資格ストレージが(むしろ、あなたのコード内または読み込み可能な設定ファイルに比べて)IISの設定で安全に行われます。同じWindowsドメイン(または信頼関係を持つ異なるドメイン)でのウェブサーバやファイルサーバを置くことは最も簡単な方法ですが、「同じユーザー名/パスワード」の事はそこにも動作するはずです。
あなたのコードや設定にユーザ名/パスワードを置くことを気にしない場合は、、あなたはP /でWNetAddConnection2に起動し、ユーザ名を渡すことができます/パスワードで、あなたは共有にアクセスすることができるはずです。これは、一致するアカウントを持っているウェブサーバを必要としませんが、あなたが本当にパスワード(暗号化されたレジストリの保存にSystem.Security.Cryptography.ProtectedDataに見て)を確保する必要があります。
他のヒント
これを試します
WebRequest request = WebRequest.Create( "http://server/file.xml" );
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential( "user", "pass" );
request.GetResponse();