ASP.NETの認証と認定プロセスにおいては、IISによる認証(基本認証、統合Windows認証など)と、ASP.NETによる認証(Windows認証、フォーム認証)が同時に行われ、それぞれの認証プロセスによって認証されたIDが適宜参照されるということを解説してきた。つまり、ASP.NETアプリケーションの実行には、場合によっては異なる2種類のIDがかかわってくるのである。それでは、ASP.NETのアプリケーション・コードは、どちらのIDのセキュリティ・トークンによって実行されるのだろうか。
答えは、どちらのIDでもなく、認証プロセスの結果とは無関係に、アカウントASPNETによって実行される、が正解である(デフォルト設定の場合)。例えば、プログラム・コードからファイルを作成するには、認証されたIDにかかわらず、アカウントASPNETに対する書き込み権が必要になるのである。ASPのように、IISによって認証されたユーザーのトークンに基づいて実行されるわけではないことに注意が必要だ。
ASPに慣れたユーザーには違和感があるかもしれないが、フォーム認証を考えてみれば納得がいくはずだ。フォーム認証では、SAMとは独立してIDが管理されるため、認証されたIDのセキュリティ・トークンによる実行はありえないということが分かるだろう。プロセスはSAMに登録されたIDでなければ実行できないからだ。
ファイル認定について解説したとき、認証されたIDに基づいてACLが参照され、アクセスの可否が判断されると述べた。これを見ると、Windows認証を利用するときはあたかも認証IDによってプロセスが実行されているかのように思えてしまうかもしれないが誤解である。これはあくまでもファイル認定という仕組みの挙動にすぎない。
ただし、これはデフォルトの挙動であって、ASPと同様に認証されたIDのセキュリティ・トークンを用いてASP.NETのコードを実行することもできる。この仕組みは偽装(Impersonation)と呼ばれている。web.configに以下の1行を書き加えれば、偽装が有効化され、アカウントASPNETではなく、認証されたIDによってコードが実行されるようになる。
<identity impersonate="true" />
ただし、ここで呼ぶIDとは、ASP.NET認証によるものではなく、IIS認証によって認証されたIDであることに注意して欲しい。フォーム認証では、通常IISで匿名アクセスが許可されるため、偽装の効果は、「コードを実行するセキュリティ・トークンがASPNETからIUSR_<コンピュータ名>に変更される」となる。これではあまり用途はなさそうだ。
それではWindows認証の場合はどうだろう。Windows認証ならば両者のIDは一致するので、偽装を利用すれば、期待通り認証されたIDによってコードが実行されるようになる。もともとWindows認証ではほとんどの認証、認定、リソースへのアクセス制御チェックが同一の認証IDによって統一的に行われるが、偽装を利用すれば、認証やファイル認定のみならず、プログラム・コードから行われるリソースへのアクセスについても、ACLを利用した制御が可能になる。その結果、コードから認定作業を取り除くことができたり、下位ティアーへセキュリティ・トークンが伝達できたりする(例:SQL Serverの統合認証モードが利用できる)、などといったメリットが得られる。
ただし、偽装を利用するには、2点注意事項がある。
まず、ASP.NET ISAPIエクステンションによって行われる.aspxファイルなどへのACLチェックは、偽装を有効化していても、依然としてアカウントASPNETによって行われる。偽装の効果はコードの実行アカウントに現れるだけで、ASP.NET ISAPIエクステンションによるACLチェックや認定には影響を及ぼさないのである。
また、偽装を有効化したときには、偽装したIDがASP.NETのテンポラリ・ディレクトリ(通常C:\WINDOWS\Microsoft.NET\Framework\v<バージョン番号>\Temporary ASP.NET Files\<アプリケーション名>)でファイルを読み書きできるようにACLを修正しておかなければならない。ASP.NETアプリケーションはここにさまざまなテンポラリ・ファイルなどを作成するが、デフォルトでここに書き込み権を持っているのはAdministratorsやASPNET(あるいはNetwork Service)など、一部のユーザーに限られているため、偽装された一般ユーザーのアカウントではファイルを作成できず、結果的にASP.NETアプリケーションを実行できなくなってしまうのである。
以上、今回はASP.NETにおける認証と認定についての基礎的な仕組みを解説した。次回では、認証と認定を実システムで利用するための具体的な構成方法とコーディングについて解説する。
Copyright© Digital Advantage Corp. All Rights Reserved.