ASP.NETでは、偽装という技術があります。WEBサーバを使ったアプリケーションの場合は、サーバ上で実行されているユーザは、WEBサーバの実行ユーザとなります。この時点で何を言っているかわからないかもしれませんが、「偽装とは、利用者(WEBをアクセスしてきた人)のユーザ情報を使ってリソースにアクセスすることができる」ということになります。
偽装するには、web.configで設定する方法と、プログラム中で任意に偽装、偽装解除をする方法があります。
web.configで偽装設定すると、そのWEBアプリケーション全体が偽装されます。
[code]
<authentication mode="Windows" />
<identity impersonate="true" />
[/code]
これではすべてがログインしているユーザに偽装されてしまうので、偽装を一時的に解除したい場合は、次のようにプログラム中で記述します。(C#)
[code]
// 偽装の停止
WindowsImpersonationContext ctx = WindowsIdentity.Impersonate(IntPtr.Zero);
try
{
// スレッドは、プロセス ID に基づいて実行しています。
// ここでは、いかなるリソース アクセスも、プロセス ID を使用します。
}
finally
{
// 偽装の再開
ctx.Undo();
}
[/code]
また、web.configでは、何もせず
[code]
<identity impersonate="false" />
省略可能
[/code]
プログラム中で偽装したいところだけで偽装するには、以下のように書きます。
[code]
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 に基づいた実行に戻る
[/code]
これであなたも偽装のスペシャリスト!