コード内の特定のユーザーを偽装(注意:実験機能)
ASP.NETアプリケーションのすべてのページとハンドラの要求で、特定のユーザーを偽装するアプリケーションの「Web.config」ファイルで<identity>要素の「userName」と「password」属性を指定する必要がある。
<identity impersonate="true" userName="accountName" password="password"/>
一般的に、最もをしようとするアカウントは、「IIS_IUSRS」グループの権限が必要である。
IIS7以前は「IUSR_マシン名」のアカウントが存在しており、アプリケーションプールのIDアカウントとして使用されているすべてのアカウントを包括することを目的として「IIS_WPG」というグループも存在した。しかし、IIS7以降は「IUSR_マシン名」アカウントを「IUSR」内蔵のアカウントでは、「IIS_WPG」グループを「IIS_IUSRS」に置き換えている。
DEXTUpload.NET Professional製品へのファイルアップロードを処理するとき、過去には<identity>要素を使用する必要がなかった。バージョン5.0.0.0以上から<identity>要素を使用する方法に加えて、コードレベルで最もを行うことができる方法を提供する。
最も必要な瞬間は、一時ファイルを作成する時点と、一時ファイルを目的地の場所に保存(「Save、SaveAs ')する時点である。電子は「FileUploadMonitorModule」で処理され、後者はaspxページ、ashxハンドラ、Controllerのアクションメソッドで「FileElement「オブジェクトの「Save、SaveAs」メソッドを呼び出しながら処理される。電子は「Web.config」に記載されて「tempPath」に記録されるときに必要であり、後者は「defaultPath」または「Save、SaveAs」が指す場所にファイルが保存される必要がある。
一時ファイルを作成する時点で最もを適用するには、「FileUploadMonitorModule」クラスを継承した新しいモジュールのクラスを「Web.config」に登録してくれるとする。
#「DEXTUpload.NET.FileUploadMonitorModule」クラスを継承した新しいクラスを直接作成する必要がある。 namespace some.project { public class ImpersonationFileUploadModule : FileUploadMonitorModule { //「HandleUploadProcess」仮想メソッドをオーバーライドする。 //「HandleUploadProcess」メソッドは、マルチパートデータから、一時ファイルを作成するメソッドである。 protected override void HandleUploadProcess(HttpApplication application, DXTEnvironment environment) { //一般的に最もをするアカウントの情報は、外部に露出されないため、アカウント情報を得てくる作業が必要である。 var userName = "iouser"; var userDomain = "."; var userPassword = "1234"; ... //「UserImpersonation」のインスタンスを作成するとき、最もするアカウント、ドメイン、パスワードをパラメータとして渡しなければならない。 //二番目のパラメータは、ドメインをいい、ローカルアカウントの場合、 "。"をADを使用している場合は、そのドメインを作成する。 //もしuserName @ Domain形式のアカウントを使用する場合、ドメインパラメータはnullに設定する。 using (var impersonation = new UserImpersonation(userName, userDomain, userPassword)) { base.HandleUploadProcess(application, environment); } } //「RemoveTempResources」仮想メソッドをオーバーライドする。 //「RemoveTempResources」メソッドは、クリーナーが動作したときに、定期的に呼び出されるメソッドです。 protected override void RemoveTempResources(DirectoryInfo temp, int ago) { var userName = "iouser"; var userDomain = "."; var userPassword = "1234"; ... using (var impersonation = new UserImpersonation(userName, userDomain, userPassword)) { base.RemoveTempResources(temp, ago); } } } }
新たに作られたクラスを「Web.config」ファイルのHTTPモジュールとして登録する。
<!-- 統合モードの場合 -->
<system.webServer>
<modules>
<!--
ファイルのアップロード処理を実行する「FileUploadMonitorModule」モジュールの代わりに新たに作成した「ImpersonationFileUploadModule」を宣言しなければならない。
-->
<add name="FileUploadMonitorModule"
type="some.project.ImpersonationFileUploadModule, ImpersonationFileUploadModule"
preCondition="managedHandler"/>
</modules>
</system.webServer>
上記のように設定をしたら、一時ファイルを作成する時点で最もが適用され、そのアカウントにファイルを生成するコードが実行される。
一時ファイルを保存する時点で最もを使用するには、次のように処理することができる。(どうせ一時ファイルを保存するには、一時ファイルを再読まなけれので、最終的に最も必要があります。)
#ashxジェネリックハンドラで処理する場合例だ。 public class upload : IHttpHandler { public void ProcessRequest(HttpContext context) { var userName = "iouser"; var userDomain = "."; var userPassword = "1234"; //「ImpersonationFileUploadModule」クラスで行ったように「UserImpersonation」クラスを使用して模倣する。 using (var impersonation = new UserImpersonation(userName, userDomain, userPassword)) { using (var dext = new FileUpload()) { //ファイルを保存する操作を実行する。 ... } } ... } ... }