次の方法で共有


ASP.NET の偽装

更新 : 2007 年 11 月

偽装を使用しているときは、要求を出しているユーザーの Window ID (ユーザー アカウント) で ASP.NET アプリケーションを実行できます。偽装は、Microsoft Internet Information Services (IIS) を使用してユーザーを認証するアプリケーションで使用されるのが一般的です。

既定では、ASP.NET の偽装は無効になっています。ASP.NET アプリケーションで偽装が有効な場合、そのアプリケーションは、IIS から ASP.NET にアクセス トークンが渡される ID のコンテキストで動作します。このトークンは、認証済みユーザーのトークン (ログインした Windows ユーザーのトークンなど) か、IIS が匿名ユーザーに提供するトークン (通常、IUSR_MACHINENAME ID) のいずれかになります。

偽装が有効な場合、偽装ユーザーのコンテキストで動作するのはアプリケーション コードだけです。アプリケーションは ASP.NET プロセスの ID を使用してコンパイルされ、構成情報が読み込まれます。詳細については、「ASP.NET プロセス ID の構成」を参照してください。コンパイルされたアプリケーションは Temporary ASP.NET ファイル ディレクトリに置かれます。偽装されるアプリケーション ID は、このディレクトリに対する読み取り/書き込みアクセス権を持っている必要があります。また、偽装されるアプリケーション ID には、少なくともアプリケーション ディレクトリとそのサブディレクトリ内のファイルに対する読み取りアクセス権も必要です。詳細については、「ASP.NET の必須アクセス制御リスト (ACL)」を参照してください。

xh507fc5.alert_note(ja-jp,VS.90).gifメモ :

ASP.NET では、アプリケーションをコンパイルして構成情報を読み込むときに ASP.NET プロセスの Windows ID を使用するため、複数のアプリケーションをホストするサーバー上にあるアプリケーション間でアプリケーション コードと構成情報を非公開にする必要があります。Windows Server 2003 では、複数のアプリケーション プールを作成して、アプリケーション プールごとに一意の ID を指定できます。これによって、これらの ID、および NTFS ファイル システムの場合はアクセス制御リスト (ACL: Access Control List) を使用して、アプリケーション ファイルへのアクセスを制約できます。たとえば、App1 と App2 という 2 つのアプリケーションがあり、どちらのアプリケーションの情報も非公開にする必要があるとします。App1 を ID_ApplicationPool1 という ID を持つ ApplicationPool1 アプリケーション プールに入れ、App2 を ID_ApplicationPool2 という ID を持つ ApplicationPool2 アプリケーション プールに入れることができます。ID_ApplicationPool1 のアカウントは App1 の中のファイルに対するアクセス権が与えられていますが、App2 の中のファイルへのアクセスは拒否されます。ID_ApplicationPool2 は App2 の中のファイルに対するアクセス権が与えられていますが、App1 の中のファイルへのアクセスは拒否されます。ただし Windows 2000 および Windows XP Professional では、すべての ASP.NET アプリケーションのプロセス ID が単一の ID であるため、上記のように分けることはできません。

偽装は identity 構成要素を使用して制御します。他の構成ディレクティブと同様に、このディレクティブも階層的に適用されます。アプリケーションによる偽装を有効にするための最も簡単な構成ファイルの例を次に示します。

<configuration>
  <system.web>
    <identity impersonate="true"/>
  </system.web>
</configuration>

次の例に示すように、固有の名前のサポートを追加し、アプリケーションを構成可能な ID として実行することもできます。

<identity impersonate="true" 
  userName="contoso\Jane" 
  password="********" />

この例に示されている値を、正しいパスワードに置き換えてください。

xh507fc5.alert_note(ja-jp,VS.90).gifメモ :

上記の例では、ユーザー名とパスワードは、クリア テキストで構成ファイルに格納されます。アプリケーションのセキュリティを強化するために、アクセス制御リスト (ACL) を使用して Web.config ファイルへのアクセスを制約すること、および保護された構成を使用して Web.config ファイル内の identity 構成要素を暗号化することをお勧めします。詳細については、「保護された構成を使用した構成情報の暗号化」を参照してください。

例で示す構成では、要求ユーザーの ID とは無関係に、contoso\Jane ID を使用してアプリケーション全体を実行できます。このような偽装は、他のコンピュータに代行させることができます。つまり、偽装ユーザーのユーザー名とパスワードを指定すると、ネットワーク上の別のコンピュータに接続し、統合セキュリティを使用してファイルなどのリソースを要求したり、SQL Server へのアクセスを要求したりできます。偽装を有効にし、ドメイン アカウントを ID として指定しない場合は、IIS アプリケーションが基本認証を使用するように構成されていない限り、ネットワーク上の他のコンピュータに接続できません。

xh507fc5.alert_note(ja-jp,VS.90).gifメモ :

Windows 2000 では、ASP.NET ワーカー プロセス ID の特定のユーザー資格情報を指定して偽装することはできません。ただし、特定のユーザー資格情報を指定せずに偽装を有効にすることによって、IIS によって指定された ID をアプリケーションで偽装できます。詳細については、マイクロソフト サポート技術情報 (https://support.microsoft.com) の文書 810204「PRB: Per Request Impersonation Does Not Work on Windows 2000 with ASP.NET」を参照してください。

偽装された ID の読み取り

偽装されたユーザーの ID をプログラムによって読み取る方法のコード例を次に示します。

Dim username As String = _
    System.Security.Principal.WindowsIdentity.GetCurrent().Name
String username = 
    System.Security.Principal.WindowsIdentity.GetCurrent().Name;

参照

その他の技術情報

ASP.NET Web アプリケーションのセキュリティ