この節では、ログイン認証の仕組みを実装してみましょう。ログインの仕組みを実装するにはいくつかの方法があります。
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.cs)
Loginコントロールをダブルクリックして、LoginForm_Authenticateイベントハンドラのスケルトンを表示し、次のようにプログラムを記述してください。
login.aspx.cs
○ プログラム(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.csの19行目でLoginコントロールに入力されたユーザー名、パスワードを判定しています。この部分はデータベースに格納されているデータと参照するなどに置き換えることができます。21、25行目では認証が成功したか失敗したかをセットしています。LoginコントロールのAuthenticateイベントの引数に指定されているAuthenticateEventArgsには認証の状態を設定できるオブジェクトが格納されているので、そのオブジェクトのAuthenticatedプロパティにtrueをセットすると成功、falseをセットすると失敗になります。成功すれば、LoginコントロールのDestinationPageUrlプロパティにセットされているページに飛びます。失敗した場合は再びログインページが表示されます。