IISの偽装と解除(ASP.NETプログラミング)
2014/05/19

ASP.NETでは、偽装という技術があります。WEBサーバを使ったアプリケーションの場合は、サーバ上で実行されているユーザは、WEBサーバの実行ユーザとなります。この時点で何を言っているかわからないかもしれませんが、「偽装とは、利用者(WEBをアクセスしてきた人)のユーザ情報を使ってリソースにアクセスすることができる」ということになります。
偽装するには、web.configで設定する方法と、プログラム中で任意に偽装、偽装解除をする方法があります。
web.configで偽装設定すると、そのWEBアプリケーション全体が偽装されます。
<authentication mode="Windows" /> <identity impersonate="true" />
これではすべてがログインしているユーザに偽装されてしまうので、偽装を一時的に解除したい場合は、次のようにプログラム中で記述します。(C#)
// 偽装の停止 WindowsImpersonationContext ctx = WindowsIdentity.Impersonate(IntPtr.Zero); try { // スレッドは、プロセス ID に基づいて実行しています。 // ここでは、いかなるリソース アクセスも、プロセス ID を使用します。 } finally { // 偽装の再開 ctx.Undo(); }
また、web.configでは、何もせず
<identity impersonate="false" /> 省略可能
プログラム中で偽装したいところだけで偽装するには、以下のように書きます。
using System.Security.Principal; ... // 認証されたユーザーの ID を取得 WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity; WindowsImpersonationContext ctx = null; try { // 偽装の開始 ctx = winId.Impersonate(); // 偽装の実施 // 認証ユーザーの ID を用いてリソースにアクセス } // 例外の発生を回避 catch { } finally { // 偽装の取り消し if (ctx != null) ctx.Undo(); } // デフォルト ASP.NET プロセス ID に基づいた実行に戻る
これであなたも偽装のスペシャリスト!
[amazonjs asin=”4798132578″ locale=”JP” title=”独習ASP.NET 第4版”]