ASP.NET Web サイトへのアクセスの制限
更新 : 2007 年 11 月
一般に、アプリケーションへのアクセスを制限する方法は、アプリケーションがユーザーをどのように識別するかを示す認証と、アプリケーションがユーザーに許可されている権限をどのように識別するかを示す承認の 2 つに分けられます。詳細については、「ASP.NET Web アプリケーションのセキュリティ」を参照してください。
ユーザーの認証
ASP.NET アプリケーションには、ユーザーを認証するためのさまざまなオプションが用意されています。だれでも閲覧できる読み取り専用アプリケーションでは、匿名認証を使用します。アプリケーションへのアクセスをより厳しく制限するには、なんらかの認証を使用してユーザーを識別する必要があります。ASP.NET アプリケーションのユーザーを認証するときは、Windows リソースへのアクセスに使用されるアプリケーション ID と、ASP.NET にアクセスするユーザーの識別に使用される ASP.NET ユーザー ID という 2 つの ID を考慮する必要があります。
ASP.NET ユーザー ID がなくてもアプリケーションを実行できますが、Windows アプリケーション ID は常に割り当てられます。アプリケーションをセキュリティで保護するには、アプリケーションの Windows ID を必要なリソース (ファイル アクセスやデータベース アクセスなど) だけに制限する必要があります。
ASP.NET アプリケーション ID
ASP.NET ページが実行されるときは、サーバーが、ASP.NET コードを実行しているプロセスのセキュリティ コンテキスト (ID) を持っている必要があります。この ID は、Windows 統合セキュリティを使用して、NTFS ファイル システムによって保護されるファイルやネットワーク リソースなどのリソースをセキュリティ保護するときに使用されます。
たとえば、アプリケーションの App_Code サブディレクトリに格納されているアプリケーション コードを含むファイルは、ASP.NET アプリケーション ID による読み取りしか必要としません。したがって、App_Code ディレクトリ内のファイルのセキュリティ設定を、ASP.NET アプリケーション ID が読み取りアクセス許可だけを持つように制限できます。ASP.NET アプリケーションの Windows ID のもう 1 つの一般的な使用方法は、統合セキュリティを使用した SQL Server への接続の ID として使用することです。詳細については、「ASP.NET の必須アクセス制御リスト (ACL)」および「方法 : Windows 統合セキュリティを使用して SQL Server にアクセスする」を参照してください。
ASP.NET アプリケーションの ID は、いくつかの要因によって決定されます。既定では、ASP.NET ページは、Web サーバー上で ASP.NET ページを処理するサービスの Windows ID で実行されます。Windows Server 2003 を実行しているコンピュータの場合、この ID は、ASP.NET アプリケーションを含んでいるアプリケーション プールの ID (既定では、NETWORK SERVICE アカウント) となります。Windows 2000 および Windows XP Professional を実行しているコンピュータの場合、この ID は、.NET Framework のインストール時に作成されるローカル ASPNET アカウントとなります。この ID は、必要に応じて別の ID に設定できます。詳細については、「ASP.NET プロセス ID の構成」を参照してください。
ASP.NET ページを実行する Windows ID は、system.web 構成セクションの identity 要素を使用することによって変更できます。identity 要素を使用して、Windows ユーザー ID を偽装するように ASP.NET に指示できます。Windows ID を偽装すると、アプリケーションの ASP.NET ページがその Windows ID で実行されます。偽装するユーザー名とパスワードは指定できます。または、偽装を有効にして、IIS によって指定された匿名 ID か、IIS によって指定された認証済みのブラウザ ID (匿名認証、Windows 統合 (NTLM) 認証など) のいずれかで ASP.NET を実行することもできます。詳細については、「ASP.NET の偽装」を参照してください。
Windows ID を偽装する場合は、偽装されたユーザー ID ではなく、プロセスの元の ID に戻るコードを実行できます。そのため、アプリケーションを他のアプリケーションと別に保持する必要がある環境では、Windows Server 2003 を実行しているコンピュータ上の別々のアプリケーション プールにそれらのアプリケーションを配置する必要があります。各アプリケーション プールは、一意の Windows ID で構成する必要があります。
ASP.NET ページが実行しているオペレーティング システム スレッドの Windows ID は、次のコード例に示すように、GetCurrent メソッドから返される WindowsIdentity の Name プロパティを使用して簡単に調べることができます。
<%=System.Security.Principal.WindowsIdentity.GetCurrent().Name%>
ASP.NET ユーザー
ASP.NET ユーザー ID は、ASP.NET 固有のリソースにアクセスするために使用されます。たとえば、アプリケーションで一部のユーザーだけが利用できる部分を識別して、それ以外の部分はすべてのユーザーが利用できるようにできます。
ASP.NET ユーザーは、アプリケーションの Web.config ファイルの system.web セクションにある authentication 要素によって決定されます。アプリケーションの ASP.NET ID を認証する方法はいくつかあります。IIS によって指定される Windows ユーザー名、ASP.NET フォーム認証、パスポート認証、またはカスタムの認証方法を使用できます。ASP.NET ID には、現在の HttpContext の User プロパティを使用してアクセスできます。詳細については、「ASP.NET の認証」を参照してください。
ASP.NET フォーム認証またはカスタムの認証方法を使用して ASP.NET ID を認証する場合は、ユーザー データ ストアやユーザー管理機能を提供する ASP.NET メンバシップを利用できます。詳細については、「メンバシップを使用したユーザーの管理」を参照してください。
ユーザーの承認
承認とは、ユーザーのアクセスを必要なリソースだけに制限することです。これには、必要なファイル、データベース、およびアプリケーションの部分だけにアクセスを制限する場合があります。また、コード アクセス セキュリティを使用してコードへのアクセスを制限する場合も含まれます。
ファイルへのアクセスを制限するには、NTFS アクセス制御リストと FileAuthorizationModule を使用します。詳細については、「ASP.NET の承認」および「ASP.NET の必須アクセス制御リスト (ACL)」を参照してください。
アプリケーションの特定の部分へのアクセスを制限するには、UrlAuthorizationModule と ASP.NET ロール管理を使用します。詳細については、「ASP.NET の承認」および「ロールを使用した承認の管理」を参照してください。