簡単なログイン認証をつくる

 この節では、ログイン認証の仕組みを実装してみましょう。ログインの仕組みを実装するにはいくつかの方法があります。

 ASP.NETメンバーシップを使うと、データベースにユーザー、ロール、アクセス規則や、ログイン認証、ユーザー登録、パスワード変更などの機能を組み込むことができます。

 今回は、独自ログインの簡単なログイン方法を確認してみましょう。ASP.NETに組み込まれているLoginコントロールを使ってログイン認証をさせてみましょう。

Loginコントロール

 Loginコントロールはユーザー認証のためのフォームを表示します。ASP.NETメンバーシップを使う場合は特にプログラムを記述する必要はありません。独自認証をさせる場合はプログラムを記述します。

■ 主なプロパティ

プロパティ名 概要
Password ユーザーが入力したパスワードを取得する
UserName ユーザーが入力したユーザー名を取得する
Loginの主なプロパティ

■ 主なイベント

プロパティ名 概要
Authenticate ユーザーが認証されたときに発生する
Loginの主なイベント

LoginNameコントロール

 LoginNameコントロールはログインしたユーザーの名前を表します。このコントロールはSystem.Web.UI.Page.User.Identity.Nameプロパティの値を表します。

LoginStatusコントロール

 LoginStatusコントロールは未認証のユーザーにはログインページへのリンクを表示し、認証済みのユーザーにはログアウトのリンクを表示します。

プロジェクトの種類 ASP.NET Webアプリケーション
プロジェクト名 LoginTest

サンプルダウンロード

○ デザイン(index.aspx)

 Webフォーム(index.aspx)を追加して、次のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

○ デザイン(login.aspx)

 Webフォーム(login.aspx)を追加して、次のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

○ プログラム(login.aspx.cs)

 Loginコントロールをダブルクリックして、LoginForm_Authenticateイベントハンドラのスケルトンを表示し、次のようにプログラムを記述してください。

login.aspx.cs

  1. protected void LoginForm_Authenticate(object sender, AuthenticateEventArgs e)
  2. {
  3.  if (this.loginForm.UserName == "asp.net" && this.loginForm.Password == "pass")
  4.  {
  5.   e.Authenticated = true;
  6.  }
  7.  else
  8.  {
  9.   e.Authenticated = false;
  10.  }
  11. }

○ プログラム(Web.config)

 index.aspxにアクセスしたら、login.aspxに遷移するように設定をします。次のように要素を追加してください。

index.aspx.cs

  1. <configuration>
  2.  <system.web>
  3.   <compilation debug="true" targetFramework="4.5" />
  4.   <httpRuntime targetFramework="4.5" />
  5.   <authentication mode="Forms">
  6.    <forms loginUrl="login.aspx" name="logintest" />
  7.   </authentication>
  8.   <authorization>
  9.    <deny users="?"/>
  10.   </authorization>
  11.  </system.web>
  12.  <appSettings>
  13.   <add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
  14.  </appSettings>
  15. </configuration>

○ 実行結果

実行結果
実行結果

○ 解説

 Web.configでauthentication要素を追加しました。Authentication要素はASP.NETでの認証スキーマを構成します。mode属性に「Forms」を指定していますが、これは既定の認証モードとしてASP.NETフォームベース認証を表します。他にも次のようなモードがあります。

モード名 概要
Windows 既定の認証モードとしてWindows認証を指定する(規定値)
Forms 既定の認証モードとしてASP.NETフォームベース認証を指定する
Passport 既定の認証モードとしてMicrosoftパスポートネットワークを指定する
None 認証を指定しない
認証をさせないか、独自の認証を実装るときに指定する
modo属性の一覧

 今回はASP.NETフォームベース認証を使うので、子要素にforms要素を指定しています。この要素の主な属性には次のようなものがあります。

属性名 概要
cookieless Cookieを使用するか、またCookieno動作を定義する
defaultUrl 認証後のにリダイレクトするURLを定義する
loginUrl 認証用のCookieが見つからない場合にリダイレクトするログインページのURLを定義する
name 認証に使用するCookie名を指定する
timeout Cookieのタイムアウトまでの時間を整数の分で指定する
主な属性の一覧

 Authorization要素はWebクライアントのURLへのアクセスを管理する、Webアプリケーションの承認を構成します。この要素には主に次のような要素を設定します。

サブ要素名 概要
allow アクセスを許可する規則を追加する
deny アクセスを拒否する規則を追加する
主なサブ要素の一覧

 今回はdeny要素を設定していますが、拒否に関するルールを設定します。属性には次のようなものがあります。

属性名 概要
uses アクセスを拒否するユーザーをカンマ区切りで指定する
「?」を指定すると匿名ユーザーが拒否され、「*」を指定すると全ユーザーが拒否される
roles アクセスを拒否するロールをカンマ区切りで指定する
verbs アクセスを拒否するHttp伝送方法をカンマ区切りで指定する
GET、HEAD、POST、DEBUGのいずれかを指定する
主な属性の一覧

 login.aspx.csの19行目でLoginコントロールに入力されたユーザー名、パスワードを判定しています。この部分はデータベースに格納されているデータと参照するなどに置き換えることができます。21、25行目では認証が成功したか失敗したかをセットしています。LoginコントロールのAuthenticateイベントの引数に指定されているAuthenticateEventArgsには認証の状態を設定できるオブジェクトが格納されているので、そのオブジェクトのAuthenticatedプロパティにtrueをセットすると成功、falseをセットすると失敗になります。成功すれば、LoginコントロールのDestinationPageUrlプロパティにセットされているページに飛びます。失敗した場合は再びログインページが表示されます。

前へ