この節では、ログイン認証の仕組みを実装してみましょう。ログインの仕組みを実装するにはいくつかの方法があります。
ASP.NETメンバーシップを使うと、データベースにユーザー、ロール、アクセス規則や、ログイン認証、ユーザー登録、パスワード変更などの機能を組み込むことができます。
今回は、独自ログインの簡単なログイン方法を確認してみましょう。ASP.NETに組み込まれているLoginコントロールを使ってログイン認証をさせてみましょう。
Loginコントロールはユーザー認証のためのフォームを表示します。ASP.NETメンバーシップを使う場合は特にプログラムを記述する必要はありません。独自認証をさせる場合はプログラムを記述します。
| プロパティ名 | 概要 |
|---|---|
| Password | ユーザーが入力したパスワードを取得する |
| UserName | ユーザーが入力したユーザー名を取得する |
| プロパティ名 | 概要 |
|---|---|
| Authenticate | ユーザーが認証されたときに発生する |
LoginNameコントロールはログインしたユーザーの名前を表します。このコントロールはSystem.Web.UI.Page.User.Identity.Nameプロパティの値を表します。
LoginStatusコントロールは未認証のユーザーにはログインページへのリンクを表示し、認証済みのユーザーにはログアウトのリンクを表示します。
| プロジェクトの種類 | ASP.NET Webアプリケーション |
|---|---|
| プロジェクト名 | LoginTest |
○ デザイン(index.aspx)
Webフォーム(index.aspx)を追加して、次のようにコントロールを配置してください。
○ デザイン(login.aspx)
Webフォーム(login.aspx)を追加して、次のようにコントロールを配置してください。
○ プログラム(login.aspx.vb)
Loginコントロールをダブルクリックして、LoginForm_Authenticateイベントハンドラのスケルトンを表示し、次のようにプログラムを記述してください。
login.aspx.vb
○ プログラム(Web.config)
index.aspxにアクセスしたら、login.aspxに遷移するように設定をします。次のように要素を追加してください。
index.aspx.cs
○ 実行結果
○ 解説
Web.configでauthentication要素を追加しました。Authentication要素はASP.NETでの認証スキーマを構成します。mode属性に「Forms」を指定していますが、これは既定の認証モードとしてASP.NETフォームベース認証を表します。他にも次のようなモードがあります。
| モード名 | 概要 |
|---|---|
| Windows | 既定の認証モードとしてWindows認証を指定する(規定値) |
| Forms | 既定の認証モードとしてASP.NETフォームベース認証を指定する |
| Passport | 既定の認証モードとしてMicrosoftパスポートネットワークを指定する |
| None |
認証を指定しない 認証をさせないか、独自の認証を実装るときに指定する |
今回は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.vbの9行目でLoginコントロールに入力されたユーザー名、パスワードを判定しています。この部分はデータベースに格納されているデータと参照するなどに置き換えることができます。10、12行目では認証が成功したか失敗したかをセットしています。LoginコントロールのAuthenticateイベントの引数に指定されているAuthenticateEventArgsには認証の状態を設定できるオブジェクトが格納されているので、そのオブジェクトのAuthenticatedプロパティにtrueをセットすると成功、falseをセットすると失敗になります。成功すれば、LoginコントロールのDestinationPageUrlプロパティにセットされているページに飛びます。失敗した場合は再びログインページが表示されます。