2014.05.19 (Mon) Category : ASP.NET,technology Author :

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

index
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 に基づいた実行に戻る

これであなたも偽装のスペシャリスト!

C# Programming Language
カテゴリ: 辞書/辞典/その他
現在の価格: 無料

コメントを残す

%d人のブロガーが「いいね」をつけました。