.NET TIPS [ASP.NET]フォーム認証のユーザー管理をデータベース・サーバで行うには?山田 祥寛2004/04/16 |
|
|
別稿「TIPS:[ASP.NET]フォーム認証のユーザー管理をXMLファイルで行うには?」では、カスタムのユーザー管理用XML文書を追加することで、web.configでは扱うことができない独自のユーザー属性を自由に拡張する方法について紹介した。
しかし、ユーザー管理の媒体がXMLデータであることに抵抗を感じる方は意外と少なくないはずだ。XMLはいまやデータ記述言語として確実にデファクト・スタンダードの地位を確立しつつあるとはいえ、まだまだ誕生して間がない技術でもある。XML文書の取り扱いにハードルを感じるプログラマは決して少なくはないし、また、読み込みだけならばいざ知らず、登録・更新の処理までもアプリケーションから行おうとした場合、サーバへの負荷や同時アクセスによる競合の管理までも意識しなければならないのは、プログラマにとって明らかな負担である。
ユーザー情報を不特定多数のユーザーに自由に更新させたいようなケースでは、ユーザー情報をXMLファイルとしてではなく、データベース・サーバで管理する方がかえって簡便でもある。
データベース・サーバを利用するということは、単純にコーディングを簡略化するというだけではない。別稿「TIPS:[ASP.NET]フォーム認証のユーザー管理をXMLファイルで行うには?」では、いったんXML文書をすべてメモリ上に読み込まなければならなかったため、管理すべきユーザー数が増大した場合、サーバのリソース消費は無視できないものとなるが、データベース・サーバを利用した場合にはこれを意識する必要がない。また、XMLファイルでは、いかにパスワードが暗号化されているとしても、ほかのユーザー属性が任意の第三者に読み取られてしまう危険性を否定できない。例えば、ファイル・システムに対して直接にアクセスできるユーザーなどの場合は読み取りが可能だろう。しかし、データベース・サーバではデータベース独自の認証機能を持つため、単なるファイルよりもはるかに高い安全性が期待できる。
そこで本稿では、別稿「TIPS:[ASP.NET]フォーム認証のユーザー管理をXMLファイルで行うには?」のサンプルをデータベース・サーバに置き換えてみることにしたい。別稿との違いを比較しつつ、ご覧いただきたい。
1. ユーザー管理用のテーブルを定義する
データベース上に以下のようなユーザー管理用の「usrテーブル」を定義してみよう。テーブル内には、ユーザーIDとパスワードのほか、任意のユーザー属性を含むことができる。
フィールド名 | データ型 | 概要 |
uid | VARCHAR(50) | ユーザーID(主キー) |
passwd | VARCHAR(50) | パスワード(SHA1方式で暗号化) |
unam | VARCHAR(20) | ユーザー名(未使用) |
depart | VARCHAR(20) | 所属部門(未使用) |
role | VARCHAR(50) | カンマ区切りの役割名(未使用) |
usrテーブルのフィールド・レイアウト |
また、usrテーブルには仮に以下のようなデータが含まれているものとしよう。パスワードはあらかじめSHA1方式で暗号化したものを記述している。暗号化の方法については、別稿「TIPS:[ASP.NET]フォーム認証用のパスワードを暗号化するには?」を参照いただきたい。
uid | passwd | unam | depart | role |
yyamada | 8CB2237D0679CA88DB6464EAC60DA96345513964 | 山田祥寛 | 営業第2課 | admin, super,usr |
nkakeya | 8CB2237D0679CA88DB6464EAC60DA96345513964 | 掛谷奈美 | システム企画部 | super, usr |
kusui | 8CB2237D0679CA88DB6464EAC60DA96345513964 | 薄井浩一 | 人事部 | usr |
usrテーブル内にあらかじめ格納されているサンプル・データ |
2. web.configの設定を行う
ユーザー情報をテーブル化してしまったので、web.configにはもはや<credentials>要素配下の情報は必要ない。別稿「TIPS:[ASP.NET]構成ファイルのみでフォーム認証を実現するには?」のweb.configから<credentials>要素を取り除いておこう。また、<forms>要素のloginUrl属性(ログイン・ページの指定)を「db_login_cs.aspx」に変更する。
|
|
<credentials>要素を取り除いた構成ファイル(web.config) |
なお、認証対象のフォルダ(例えば、「/auth」フォルダ)におけるweb.configについては、別稿「TIPS:[ASP.NET]構成ファイルのみでフォーム認証を実現するには?」のものをそのまま転用することができる。
3. ログイン・ページを設計する
ユーザー管理にデータベース・サーバを利用する場合には、ログイン・ページには若干のコードの追加が必要になる。というのも、認証の可否を判定するためのFormsAuthenticationクラス(System.Web.Security名前空間)のAuthenticateメソッドがデータベース・サーバに対しては利用できないためだ。よって、認証を判定する部分のロジックについては、自ら構築する必要がある。次のサンプル・プログラムは、この処理を行っているログイン・ページの実装例である。
|
|
認証ロジックを組み込んだC#のログイン・ページ(db_login_cs.aspx) |
|
|
認証ロジックを組み込んだVB.NETのログイン・ページ(db_login_vb.aspx) |
FormsAuthenticationクラスのAuthenticateメソッドを使用する限りにおいてパスワードが暗号化されているかどうかということは気にする必要がない。しかし、ここで1つだけ注意すべき点は、本稿のようにカスタムの認証ロジックを自ら組み込んだ場合には、暗号化の処理も自ら組み込まなければならないという点である。
以上で一連の準備は完成だ。「/auth」フォルダ配下の任意のファイルにアクセスし、別稿「TIPS:[ASP.NET]構成ファイルのみでフォーム認証を実現するには?」同様、フォーム認証が正常に動作することを確認してみてほしい。
なお、認証後の任意のページにおいては、任意のユーザー属性情報を引用することが可能である。詳細については、別稿「TIPS:[ASP.NET]認証後のページでカスタムのユーザー情報を引用するには?」を参照いただきたい。
カテゴリ:Webフォーム 処理対象:認証 使用ライブラリ:FormsAuthenticationクラス(System.Web.Security名前空間) 関連TIPS:[ASP.NET]フォーム認証のユーザー管理をXMLファイルで行うには? 関連TIPS:[ASP.NET]フォーム認証用のパスワードを暗号化するには? 関連TIPS:[ASP.NET]構成ファイルのみでフォーム認証を実現するには? 関連TIPS:[ASP.NET]認証後のページでカスタムのユーザー情報を引用するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|