ASP.NET Web API でのフォーム認証

作成者: Mike Wasson

フォーム認証では、HTML フォームを使用してユーザーの資格情報をサーバーに送信します。 これはインターネット標準ではありません。 フォーム認証は、ユーザーが HTML フォームを操作できるように、Web アプリから呼び出される Web API にのみ適していいます。

長所 短所
  • 実装が簡単: ASP.NET に組み込まれています。
  • ASP.NET メンバーシップ プロバイダーを使用するため、ユーザー アカウントを簡単に管理できます。
  • 標準の HTTP 認証メカニズムではありません。標準の Authorization ヘッダーではなく HTTP Cookie を使用します。Cookie を無効にするユーザーもいます。
  • ブラウザー以外のクライアントからの使用が困難です。 ログインするにはブラウザーが必要です。
  • ユーザー資格情報は、要求内でプレーンテキストとして送信されます。
  • クロスサイト リクエスト フォージェリ (CSRF) に対して脆弱です。CSRF 対策が必要です。

簡単に言うと、ASP.NET でのフォーム認証は次のように機能します。

  1. 認証を必要とするリソースが、クライアントから要求されます。
  2. ユーザーが認証されていない場合、サーバーから HTTP 302 (Found) が返され、ログイン ページにリダイレクトされます。
  3. ユーザーは資格情報を入力し、そのフォームを送信します。
  4. サーバーから別の HTTP 302 が返され、それにより元の URI にリダイレクトされます。 この応答には、認証 Cookie が含まれます。
  5. クライアントからもう一度リソースの要求が行われます。 この要求には認証 Cookie が含まれているため、サーバーによって要求が許可されます。

Illustration of how forms authentication in A S P dot Net works

詳細については、フォーム認証の概要に関するページを参照してください。

Web API でのフォーム認証の使用

フォーム認証を使用するアプリケーションを作成するには、MVC 4 プロジェクト ウィザードで "インターネット アプリケーション" テンプレートを選択します。 このテンプレートでは、アカウント管理用の MVC コントローラーを作成します。 ASP.NET Fall 2012 Update で提供されている "シングル ページ アプリケーション" テンプレートを使用することもできます。

Web API コントローラーでは、「[Authorize] 属性の使用」の説明に従って、[Authorize] 属性を使用してアクセスを制限することができます。

フォーム認証では、セッション Cookie を使用して要求を認証します。 関連するすべての Cookie がブラウザーによって、宛先の Web サイトに自動的に送信されます。 この機能により、フォーム認証はクロスサイト リクエスト フォージェリ (CSRF) 攻撃に対して脆弱になる可能性があります。クロスサイト リクエスト フォージェリ (CSRF) 攻撃の防止に関するページを参照してください。

フォーム認証では、ユーザーの資格情報を暗号化しません。 そのため、SSL で使用しない限り、フォーム認証はセキュリティで保護されません。 「Web API での SSL の操作」を参照してください。