About
Visual C#
統合開発環境ツール:Visual Studio 2008 Professional
データベース:SQL Server 2005 Developer Edition
OS:Windows7 RC

Objective-C
統合開発環境ツール:Xcode3.1.2
OS:Mac OS X v10.5.7 Leopard
  C#   ASP.NET   Link   Contact
         
ユーザ認証の実装とアカウント管理
 
  無料のExpress Editionはこちらから  
 
 

開発環境

統合開発環境:
Visual Studio 2008 Professional
使用OS:
Windows7 RC

 
 

  プロバイダを使用したアカウント管理

ASP.NETでは、データベースを使用してWebアプリケーションにアクセスするアカウントを管理しています。アカウントの追加は「Webサイト管理ツール」上で行います。

今回はユーザ認証を行うWebアプリケーションを作成しますので、メニューバーから「ファイル」→「新規作成」→「Webサイト」をクリックして「ASP.NET Webサイト」を作成してください。プロジェクト名はどのような名前でも構いません。

まずは、ユーザ認証用のアカウントを作成しましょう。「ソリューションエクスプローラ」上部にあるアイコンのうち、一番右にある「ASP.NET構成」をクリックして「Webサイト管理ツール」を立ち上げます。


「Webサイト管理ツール」を立ち上げる

「Webサイト管理ツール」が表示されますので、ウィンドウ上部の「セキュリティ」タブをクリックします。ここでエラーが表示されてしまう場合は、VisualStudioを管理者として実行していないか、プロバイダが構成できていない可能性があります。詳細については「プロバイダの作成とweb.Configファイルの設定」を参照してください。


Webサイト管理ツール

「セキュリティ」タブを開くと、ウィンドウ中央部に「手順に従ってセキュリティを構成するには、セキュリティ設定ウィザードを使用してください。」と書かれているリンクがありますので、これをクリックします。なお、既に「セキュリティ設定ウィザード」で設定を行っている場合はウィンドウ下部の「ユーザーの作成」からアカウントを作成します。ここでは、まだ「セキュリティ設定ウィザード」を設定していないことを想定して解説をしていきます。(なお、セキュリティ設定ウィザードは何回でも実行することができます)


「セキュリティ」タブの内容

先程のリンクをクリックすると、「セキュリティ設定ウィザード」の「ようこそ画面」が表示されますので、続行するには「次へ」ボタンをクリックしてください。


「セキュリティ設定ウィザード」のようこそ画面

アクセス方法の選択画面に切り替わりますので、ここでは「インターネットから」を選択して「次へ」ボタンをクリックします。「ローカルエリアネットワーク(LAN)から」を選択した場合は、ASP.NETのWebアプリケーションを実行させるサーバのOSがWindows Serverクラスのものであり、なおかつネットワーク上のコンピュータのアカウントが「ActiveDirectory」によって管理されている必要があります。


アクセス方法の選択

先程の画面からウィザードを進めると、どのプロバイダでアカウントを管理するように設定されているかの確認画面が表示されていますので、ここではそのまま「次へ」ボタンをクリックします。


プロバイダの確認画面

ASP.NETのプロバイダ認証では、アカウントをグループ分けして、特定のグループだけに指定したディレクトリのWebページを閲覧できるようにするといったアクセス権を細かく設定することが可能です。なお、このときに使用するグループの事を「ロール」と呼びます。

「ロールの定義」では、「ロール」によるグループ分けを有効にするかどうかを設定できます。ロールの設定は、後でも行えるためここでは何もせずに「次へ」ボタンをクリックします。


ロールの定義

ロールの定義の設定を終えると、いよいよ新しいユーザの追加です。ユーザ名、パスワード、電子メール、パスワードを忘れたときの質問と、その質問に対する答えを記入します。パスワードには細かい入力規則が設定されており、ウィザードが簡単なパスワードであると判断した場合、警告とともにパスワードの再入力を求められますので注意が必要です。


新しいユーザーの作成画面

アカウントが正常に作成されると、以下のような画面が表示されます。ここで複数のユーザを作成したい場合は、「続行」ボタンをクリックしてユーザーの作成画面を何度も呼び出すことができます。これ以上ユーザーを追加する必要がない場合、ウィンドウ最下部の「次へ」ボタンをクリックしてください。


ユーザーの作成が正常に終わったことを通知する画面

最後に、特定のフォルダにロールやユーザによるアカウント規制を設定する画面に切り替わります。今回は特に設定しませんので、「次へ」ボタンをクリックします。


アクセス規制の追加

以上の全ての設定が正常に終了すると、「セキュリティ設定ウィザードを完了しています。」と表示された画面に切り替わります。これでユーザー管理に関する全ての手順は設定しましたので、「完了」ボタンをクリックし、ウィザードを終了させます。

  認証フォームの実装

これでログインページで使用できるアカウントを設定できましたので、実際に認証ページを作成してみましょう。標準で作成された「Default.aspx」ファイルはアクセスが許可された時に表示されるページとしますので、ログイン用のページを新たに作成します。メニューバーから「Webサイト」→「新しい項目の追加」をクリックし、「Webフォーム」を追加してください。名前は「Login.aspx」に設定します。

次に、ログイン用の「Login.aspx」ファイルをWebフォームデザイナで開き、以下のようにコントロールを配置します。


ログインページのレイアウト

ユーザ名のコントロール名は「TextBox1」、パスワードのコントロール名は「TextBox2」に設定し、ボタンコントロールには「Button1」を設定してください。「TextBox2」はパスワードを入力するテキストボックスですので、入力した内容が見えないようプロパティを変更します。プロパティウィンドウを開き、「TextMode」の値を「Password」に変更してください。

「Button1」コントロールをダブルクリックし、クリックイベントを実装します。「Login.aspx.cs」ファイルの内容を以下のように変更してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class Login : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {

   }
   protected void Button1_Click(object sender, EventArgs e)
   {
      if (Membership.ValidateUser(TextBox1.Text, TextBox2.Text))
      {
         FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, false);
      }
      else
      {
         Response.Write("アクセスできませんでした");
      }
   }
}

このコードの22行目では、「Membership」クラスの「ValidateUser」メソッドを使用しています。「ValidateUser」メソッドは、指定されたユーザ名とパスワードが有効かどうかを検証するメソッドで、引数としてユーザ名とパスワードを指定します。このプログラムではテキストボックスコントロールの「Text」プロパティを使用し、テキストボックスに入力された値をそのまま引数としています。ユーザ名とパスワードが正しければ、戻り値としてbool型のtrueが返され、処理は24行目に移行します。

24行目の「RedirectFromLoginPage」メソッドは認証済みのユーザを最初に要求されたURL、または既定のURLを開くメソッドです。第1引数にはユーザ名を、第2引数には認証情報をCookieによっていつまで保持するかをbool型で指定します。この引数がfalseの場合、ブラウザが閉じられれば認証は無効になりますが、「true」に設定した場合はブラウザを閉じても認証された状態が続きます。

最後に、「Default.aspx.cs」ファイルのPage_loadイベントを以下のように変更してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq; public

partial class _Default : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
      Response.Write(String.Format("{0}さん、こんにちは",
         Request.ServerVariables.Get("REMOTE_USER")));
   }
}

「Default.aspx」ファイルでは、ログインしているユーザ名を表示するようにコーディングしました。ログインしているユーザ名を取得するには、「Request」クラスの「ServerVariables」コレクションから「Get」メソッドを使用して変数「REMOTE_USER」を取り出します。このコードでは、「String.Format」メソッドの引数として指定し、画面に出力するよう記述しています。

  web.Configファイルの設定を変更する

先程「Login.aspx.cs」ファイルに実装した「RedirectFromLoginPage」メソッドは、何も設定しないままだとユーザが最初にアクセスしたURLに飛ばされてしまいます。そのため、「Login.aspx」ファイルを直接指定してログインを試みた場合、再び「Login.aspx」ファイルが開かれてしまいます。

また、URLを直接指定して「Default.aspx」を開いた場合は認証されずにそのままアクセスできてしまいます。これらの問題に対処するためには、「web.Config」ファイルを書き換える必要があります。

ソリューションエクスプローラから「web.Config」ファイルをダブルクリックして「<authentication mode="Forms" />」と書かれたコードを探し出し、内容を以下のように変更してください。
1
2
3
4
5
6
<authentication mode="Forms">
  <forms loginUrl="Login.aspx" defaultUrl="Default.aspx" />
</authentication>
<authorization>
  <deny users="?"/>
</authorization>

<authentication>要素の子要素である<forms>要素はプロバイダ認証に関する細かい設定を行う要素です。「loginUrl」では、認証していないユーザがWebページにアクセスしようとした際に表示するWebページを指定し、「defaultUrl」では認証後に表示するトップページを指定します。

<authorization>要素の子要素である<deny>要素は特定のユーザからのアクセスを拒否する際に使用します。ここでの「?」は未認証のユーザを表すもので、この一文は未認証のユーザからのアクセスを一切拒否するように記述したものです。

それでは、実際にプログラムを実行してみましょう。ここでは、参考の為にソリューションエクスプローラから「Default.aspx」を右クリックし、「スタートページに設定」を選択しておきます。

実行結果を見てみると、一番初めに表示されるページを「Default.aspx」ファイルに指定していたにもかかわらず、「Login.aspx」ファイルが開かれました。これは、未認証のユーザは「Login.aspx」ファイルにリダイレクトするようweb.Configファイルを設定したためです。


リダイレクトされた「Login.aspx」ファイル

ここで、先程作成したアカウントのユーザー名とパスワードを入力しましょう。なお、パスワードを間違えて入力すると、以下のように認証されず、エラーメッセージが表示されます。


パスワードを間違えた場合

アカウント名とパスワードを入力し、アカウントの認証に成功すると認証後のトップページとして指定した「Default.aspx」が開かれます。コード中でユーザー名を表示するようコーディングしていましたので、ユーザー名もしっかり表示されていますね。


認証後の「Default.aspx」ファイル

このように、プロバイダ認証を使えば、ユーザ認証の機能をとても簡単に実装することができます。
   
Search:

Count:
inserted by FC2 system