News & Information

~ 良いものを創造し、”よろこび”を提供する ~

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

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

2014/05/19

index
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]

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

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

仲間大募集!

現状に満足することなく常に新しい技術を学び、問題解決に取り組める方、
積極的に新しいことにチャレンジしたい!とお考えの方、
ご自身のスキル・経験を活かしてお仕事をしたいとお考えの方を
心より、お待ちしております!!

現状に満足することなく常に新しい技術を学び、問題解決に取り組める方、 積極的に新しいことにチャレンジしたい!とお考えの方、 ご自身のスキル・経験を活かしてお仕事をしたいとお考えの方を 心より、お待ちしております!!