勘違いして覚えていたこともあったので、ASP.NET の偽装に関してメモを記載しておきます。今回のトピックとなる、偽装設定を行うためのidentity 要素の説明のリンクを掲載しておきます。

identity 要素 (ASP.NET 設定スキーマ) 
http://msdn.microsoft.com/ja-jp/library/72wdk8cc(VS.80).aspx

 

1. 偽装設定をするとどのユーザのセキュリティコンテキストでリクエストが処理されるか

ASP.NET の Web.config にsystem.web 要素に identity 用を次のように設定して、ユーザを偽装することができます。

<identity impersonate="true|false" 
          userName="domain\username"
          password="password"/>

偽装というのは、IISからみて、どのユーザのセキュリティコンテキストでページリクエストの処理を行っているかを指定する設定です。既定ではimpersonate がfalse になるので、アプリケーションプールの実行ユーザ(通常はIIS 6.0では NETWOR SERVICE)が、スレッドコンテキストのユーザとなります。

impersonate が true の場合、ページを処理するスレッドのセキュリティコンテキストは、Windows認証の場合、Windows 認証されたユーザとなり、フォーム認証の場合は、匿名ユーザINET_USER(設定により変わる)となります。

外部リソースにアクセスする場合は、セキュリティコンテキストが重要となるので、注意が必要です。

userName,passwordを指定すると、偽装するユーザを指定することができます。偽装を有効にすると、ページの処理が偽装されたユーザのセキュリティコンテキストで処理されますので、セキュリティ設定なので重要になります。

2. Dynamics CRM の CRMImpersonatorについて

Dynamics CRM で 同じ用に偽装を行えるCrmImpersonator というクラスがあります。ややこしいのですが、CRMImpersonator を使用すると、偽装設定してあったとしても、アプリケーションプールの実行ユーザの権限でスレッドのセキュリティコンテキストで処理を行うように切り替えることができるようになります。

メモは以上です。記載しておかないと忘れてしまうので備忘録として記載しました。