ASP.NETの標準機能でフォーム認証を実装する

今回はASP.NETのフォーム認証の話です。
標準機能だけを使って、ほぼコードを書かずにフォーム認証を実装してみようと思います。
対象の環境は、Visual Studio 2010、ASP.NET4(WebForm)、SQL Sever 2008 R2 Expressです。


1.プロジェクトの作成

ASP.NET Webアプリケーションを新規で作成します。
※「ASP.NET 空のWebアプリケーション」は本当に空なので今回は使いません。
新規作成した時点で、アカウント管理関連のページが自動的に作成されます。
こんな感じ。

Web.configも以下のように初期設定が自動で行われます。関連するところを抜き出します。

[sourcecode language=”csharp”]
//フォーム認証をするという設定
<authentication mode="Forms">
//認証ページの場所
<forms loginUrl="~/Account/Login.aspx" timeout="2880" />
</authentication>

//利用するメンバーシッププロバイダーの登録
<membership>
<providers>
<clear/>
//標準の「SqlMembershipProvider」を利用。その他、アカウント情報を取り扱う際の設定をここで行っている。
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider"
connectionStringName="ApplicationServices" enablePasswordRetrieval="false"
enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
[/sourcecode]


2.早速、実行

このまま実行すれば、簡易的なアカウント管理機能が利用できます。
アカウント情報を格納するデータベース(aspnetdb)も実行時に自動生成されます。
※SQL Sever ExpressのattachDBっていう機能(?)で作られるみたいだけど、どのタイミングで生成されるかがいまいち分からないです…


ログイン画面は以下のとおり。



ユーザー情報作登録画面は以下のとおり。


3.認可処理の実装

ユーザーの認証処理部分を作り終わったので、次はリソース(ここではページ)の認可処理部分を実装します。
※認可の別名は、アクセス制御、承認、authorizationなどと言われています。
今回は、「(自動生成されている)About.aspxは認証済みユーザーしか利用できない」というシナリオにします。
ルート直下のweb.configに以下の記述を追加。location pathを使って、特定のページのみの設定を行います。

[sourcecode language=”csharp”]
<location path="About.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
[/sourcecode]

これで、About.aspxページを表示しようとすると、ログインページにリダイレクトされます。
(認証完了後は、自動的にAbout.aspxページに遷移します。)
裏側でこっそり認証用クッキーが作成されているため、こんな動作をするわけです。

00.SQL Severの有償エディションを利用する場合

Express以外だと、attachDBという機能が使えないです。
ですので、StandardとかEnterpriseなどのエディションでは、前もって、「aspnetdb」を作成しておく必要があります。
Web.configの接続文字列も、正しく修正する必要があります。
「aspnetdb」を作成するには、aspnet_regsqlコマンドを利用します。
実行方法は、Visual Studio コマンドプロンプトを利用すれば良いです。
もしくは、C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regsql.exe にあります。

aspnetdbにはこんなテーブルが入っています。

この中で認証に関係するのは…

  • Membership
  • Roles
  • Users
  • UsersInRoles

かな?これはちょっと自信がないです。


おわりに

途中で簡易なログインページが…って書いた気がしますが、簡易ではないですね。
しっかりとしたログインページができます。
MSがしっかりテストして作っているものだから、下手に自分で作るよりかセキュリティ面でも安心・安全のはずです。
ただ、アカウントのデータストアには柔軟性がほしい!ってのは要件的にあると思います。
これについては、次回以降。

コメント

タイトルとURLをコピーしました