マイクロソフト株式会社 デベロッパーマーケティング本部
デベロッパーエバンジェリスト 辻郷 隆史

最終更新日 2004 年 6 月 9 日

このコンテンツのポイント

  • Forms 認証の使用方法について理解する。
  • URL 承認について理解する。
  • コードによる認証情報の確認方法について理解する。

今回紹介するコード

<WebForm1.aspx.cs>

C#
private void Page_Load(object sender, System.EventArgs e)
	{
		Label1.Text = "ようこそ " + Context.User.Identity.Name + " さん";
	}
 

 

<LoginForm.aspx.cs>

C#
private void Button1_Click(object sender, System.EventArgs e)
	{
		if (System.Web.Security.FormsAuthentication.Authenticate(TextBox1.Text, TextBox2.Text))
		{
			System.Web.Security.FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, false);
		}
		else
		{
			Label1.Text = "認証エラーです。";
		}
	}
 

 

<Web.config>

<configuration>
    …
    <system.web>
    …
        <authentication mode="Forms">
            <forms loginUrl="loginForm.aspx">
            <credentials passwordFormat="Clear">
                <user name="user1" password="pass1" />
                <user name="user2" password="pass2" />
                <user name="user3" password="pass3" />
            </credentials>
            </forms>
        </authentication>
        <authorization>
            <deny users="?"/>
            <deny users="user2" />
        </authorization>
    …
    </system.web>
    …
    </configuration>

 

目次

はじめに
作成するアプリケーションの概要
Web フォームのデザイン
Web フォームのコードの記述
ログイン ページ / Web フォームのデザイン
ログイン ページ / Web フォームのコードの記述
Web.config ファイルの設定
動作と解説
おわりに

Visual Basic .NET の内容はこちらに掲載しています。
10 行でズバリ !! Web アプリケーションにおける認証と承認 (VB.NET)


はじめに

ASP.NET Web アプリケーションでは、様々な認証 / 承認方式を使用することが可能です。
今回の 10 行シリーズでは、その中からログイン ページを使用したユーザー認証などで使用可能な Forms 認証について、簡単なサンプル アプリケーションを通して解説します。
また、 Forms 認証を行う際に併せて使用することが多い、 URL 承認についても解説します。
なお、Web アプリケーションの基本的な開発方法についての説明は割愛しています。まず初めに「10 行でズバリ !! ASP.NET Web フォームによる Web アプリケーション開発 (C#)」をご覧ください。

 

作成するアプリケーションの概要

今回のサンプル アプリケーションでは、2 つの Web フォームを使用します。
1 つ目は、実際にユーザーが URL よりアクセスを行うための Web フォームです。
2 つ目は、ユーザー名およびパスワードによる Forms 認証を行うためのログイン ページの Web フォームです。
また、 ASP.NET の設定ファイルである Web.config ファイルについても、Forms 認証 / URL 承認のための各種設定を行います。

 

Web フォームのデザイン

Visual Studio .NET 2003 を起動して、新規にプロジェクトを作成します。ここでは、[Visual C#プロジェクト] で、[ASP.NET Webアプリケーション] テンプレートを使用します。


図 1. ASP.NET Web アプリケーションの選択

ここでは、新しく追加された Web フォーム (例では "WebForm1.aspx") に Label コントロール 1 つ配置し、以下の様にプロパティを設定します。

コントロール ID プロパティ名 設定値
Label1 Text "初期状態です。"

 


図 2. Web フォームのデザイン

 

Web フォームのコードの記述

メニューより [表示] - [コード] を選択し、以下の赤字で書かれているコードを記述します。

C#
private void Page_Load(object sender, System.EventArgs e)
{
  Label1.Text = "ようこそ " + Context.User.Identity.Name + " さん";
}
 

Web ページのロード時に、ラベル コントロールへユーザー名を設定するコードを記述します。
ここでは Context オブジェクトより、認証済みのユーザー名の情報を取得しています。

 

ログイン ページ / Web フォームのデザイン

次に、ログイン ページの Web フォームを作成するために、[プロジェクト] メニューの [Webフォームの追加]を選択し、[ファイル名] テキストボックスに LoginForm.aspx の名前を設定し [開く] ボタンをクリックします。

新しく追加した Web フォーム ("LoginForm.aspx") に Text コントロール 2 つ、Button コントロール 1 つ、 Label コントロール 1 つを配置し、以下の様にプロパティを設定します。

コントロール ID プロパティ名 設定値
Button1 Text "ログイン"
Label1 Text "ログインしてください。"

 


図 3. ログイン ページ Web フォームのデザイン

 

ログイン ページ / Web フォームのコードの記述

LoginForm.aspx デザイン画面の Button1 コントロールをダブルクリックし、以下の赤字で書かれているコードを記述します。

C#
private void Button1_Click(object sender, System.EventArgs e)
{
  if (System.Web.Security.FormsAuthentication.Authenticate(TextBox1.Text, TextBox2.Text))
  {
    System.Web.Security.FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, false);
  }
  else
  {
    Label1.Text = "認証エラーです。";
  }
}
 

Button1 コントロール クリック時のコードを記述します。
まず始めに、 FormsAuthentication クラス Authenticate メソッドにて、フォーム認証資格情報と入力された ユーザー名およびパスワードの妥当性の確認を行います。
なお、フォーム認証資格情報については、後述の Web.config にて設定します。
次に、フォーム認証資格情報が正しい場合は、 FormsAuthentication クラス RedirectFormLoginPage メソッドにて、妥当性の確認済みのユーザー名 TextBox1.Text を使用し、初めに要求された URL ( WebForm1.aspx ) へリダイレクトします。

 

Web.config ファイルの設定

Web.config ファイルを開き、 Forms 認証および URL 承認に関する設定を記述します。
デフォルトで作成される Web.config には、<system.web> 要素内に <authentication> および <authorization> の要素が記載されておりますので、下記の通り各要素を修正します。

< 修正前 >

<configuration>
  <system.Web>
  …
    <authentication mode="Windows" />
      <!--  権限の設定
            このセクションは、…
      -->
 
    <authorization>
      <allow users="*" /> <!-- 全ユーザーへの許可 -->
        <!--  <allow users="[ユーザーのコンマ区切り一覧]"
                     roles="[ロールのコンマ区切り一覧]"/>
              <deny  users="[ユーザーのコンマ区切り一覧]"
                     roles="[ロールのコンマ区切り一覧]"/>
        -->
    </authorization>
  …
  </system.Web>
</configuration>

 

< 修正後 >

<configuration>

  <system.Web>
  …
    <authentication mode="Forms">
      <forms loginUrl="LoginForm.aspx">
        <credentials passwordFormat="Clear">
          <user name="user1" password="pass1" />
          <user name="user2" password="pass2" />
          <user name="user3" password="pass3" />
        </credentials>
      </forms>
    </authentication>
 
    <authorization>
      <deny users="?"/>
      <deny users="user2" />
    </authorization>
  …
  </system.Web>

</configuration>

Web.config の <system.web> <authorization> 要素では、認証に関する設定を行います。
デフォルトでは、 Windows 認証 <authentication mode="Windows" /> が設定されているため、認証方式を Forms 認証 <authentication mode="Forms"> に変更します。
更にその中の要素として、<forms> 要素を設定し、下記の項目を設定します。

項目 内容
loginUrl 有効な認証が行われていない場合に、ログインを行うためのリダイレクト先の URL
passwordFormat

パスワードを格納するための暗号方式

Clear パスワード暗号化なし
MD5 パスワードを MD5 ハッシュアルゴリズムにて暗号化
SHA1 パスワードを SHA1 ハッシュアルゴリズムにて暗号化
name ユーザー名
password パスワード

Web.config の <authorization> 要素では、URL 承認に関する設定を行います。
デフォルトでは、全てのユーザーに対してアクセス許可 <allow users="*" /> が設定されているため、認証が行われていないユーザーのアクセス拒否 <deny users="?" /> および user2 ユーザーのアクセス拒否 <deny users="user2" /> を行うように変更します。

 

動作と解説

メニューより [デバッグ] - [開始] (または [F5] キー) を選択し、デバッグ実行をします。
ブラウザが起動し、 WebForm1.aspx ではなく LoginForm.aspx が表示されます。


図 4. ログイン ページの表示

これは、下記の順番にて処理が行われた結果、 LoginForm.aspx へリダイレクトされるためです。

(1) Web.config <authentication mode="Forms"> により、 Forms 認証方式を使用します。
このタイミングでは、ユーザー名による認証が行われていないため、Cookie としてユーザー名が設定されません。
(2) Web.config <authorization> の設定による URL 承認を実施します。
Cookie としてユーザー名が設定されていないため、 <deny users="?" /> の設定に該当し、アクセスが拒否されます。
(3) アクセスが拒否されたため、Web.config <forms loginUrl="LoginForm.aspx"> にて指定されている、 LoginForm.aspx へリダイレクトされます。

テキスト ボックスに user1 および pass1 を入力後、ログイン ボタンをクリックすると、 Forms 認証が実施され、 WebForm1.aspx のページが表示されます。


図 5. ログイン 成功時

内部の処理順序としては、下記の通りです。

(1) System.Web.Security.FormsAuthentication.Authenticate にて Web.config に記述されている name / password のフォーム認証資格情報との妥当性をチェックします。
(2) 妥当性のチェックに成功した場合は、System.Web.Security.FormsAuthentication.RedirectFromLoginPage にて、元のページ WebForm1.aspx へリダイレクトします。
このタイミングで、Cookie としてユーザー名を含めた情報が設定されます。
(3) Web.config <authorization> の設定による URL 承認を実施
Cookie に格納されているユーザー名 user1 については、<deny users="?" /> の設定に該当しないため、アクセスは拒否されません。
(4) WebForm1.aspx の Page_Load にて Context オブジェクトより、認証済みのユーザー名の情報を取得し、ラベルへ設定します。

なお、正しくないユーザー名およびパスワードを入力した場合、および Forms 認証に成功した場合でも、 URL 承認にて拒否されているユーザー名 user2 では、 WebForm1.aspx が表示されず、再度ログイン ページが表示されます。


図 6. Forms 認証失敗時


図 7. user2 ログイン時

※ user2 で認証成功後、一度 WebForm1.aspx へリダイレクトされますが、 URL 承認でアクセス拒否されるため、再び LoginForm.aspx へリダイレクトされます。

 

おわりに

このように、Forms 認証および URL 承認を使用することにより、簡単にログイン ページを使用した Web アプリケーションを作成することが出来ます。
今回のサンプル アプリケーションでは Web.config ファイルに記載されているユーザー名および暗号化されていないパスワードを使用しましたが、下記のような認証 / 承認を行うことも可能です。

関連するコンテンツなどを参考にしながら、他の認証 / 承認を使用することで、より理解を深めることが可能です。
この機会に是非チャレンジしてみて下さい。 


 

Code Recipe .NET Framework デベロッパー センター

ページのトップへ