目次

ASP.NETのフォーム認証を使う - ASP.NET

ASP.NETのフォーム認証を使う方法を紹介します。

Web.configのsystem.webセクション内に以下のauthenticatoinセクションを記述します。
    <authentication mode="Forms">
      <forms loginUrl="Login.aspx" timeout="10">
        <credentials passwordFormat="Clear">
          <user name="penguin" password="PASSWORD"/>
          <user name="bear" password="HIMITSU"/>
          <user name="duck" password="NAISYO"/>
        </credentials>
      </forms>
    </authentication>

解説

loginUrlにログイン認証用のWebフォームを指定し、timeoutにログインチケットの有効期間を分で設定します。上記の場合はチケットが10分間有効になります。
 <forms loginUrl="Login.aspx" timeout="10">

credentialsタグにパスワード形式を指定します。今回は"Clear"を指定し平文パスワードを指定します。(passwordFormatには"MD5","SHA1"を指定できます。)
 <credentials passwordFormat="Clear">

credentialsタグ内にフォーム認証でログインできるユーザー名とパスワードを記述します。
 <user name="penguin" password="PASSWORD"/>
 <user name="bear" password="HIMITSU"/>
 <user name="duck" password="NAISYO"/>

匿名ユーザーのアクセス禁止

Web.configのsystem.webセクション内に以下のauthorizationセクションを記述します。
  <authorization>
    <deny users ="?" />
    <allow users = "*" />
  </authorization>
この記述により匿名ユーザーのアクセスを禁止します。

認証フォームの実装

認証フォームを実装します。Webフォームを新規作成し、テキストボックス2つ(TextBoxUser, TextBoxPass)とボタン1つとラベル1つを配置します。
ButtonコントロールのClickイベントに以下のコードを記述します。

コード

protected void Button1_Click(object sender, EventArgs e)
{
  if (FormsAuthentication.Authenticate(TextBoxUser.Text, TextBoxPass.Text)) {
    FormsAuthentication.RedirectFromLoginPage(TextBoxUser.Text, false);
    //Server.Transfer("Default.aspx");
  }
  else {
    LabelMsg.Text = "失敗しました。パスワードを確認してください";
    LabelMsg.Visible = true;
  }
}

解説

で入力されたユーザー名とパスワードがあっているかの検証をします。ユーザー名とパスワードが一致していれば、
FormsAuthentication.Authenticate(TextBoxUser.Text, TextBoxPass.Text)

Default.aspxへリダイレクトします。今回は、認証情報をCookieに保存しないためRedirectFromLoginPageメソッドの第二引数をfalseにしました。
FormsAuthentication.RedirectFromLoginPage(TextBoxUser.Text, false);

入力したユーザー名とパスワードが誤っている場合は、以下のコードによりパスワードが誤っている旨のメッセージを表示します。
LabelMsg.Text = "失敗しました。パスワードを確認してください";
LabelMsg.Visible = true;


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2011-08-04
iPentec all rights reserverd.