- PR -

ASP.NETでForm認証の疑問

投稿者投稿内容
ぬるぴょん
ベテラン
会議室デビュー日: 2003/06/02
投稿数: 62
投稿日時: 2003-07-11 20:49
書籍などではASP.NETでForm認証を行うとき、
Web.configに認証するユーザ名とパスワードを設定すると書いてあるのですが

例えばデータベースのユーザテーブルに何千件ものデータがありそれを

<user name="suzuki" password="123" />
<user name="sato" password="456" />
<user name="matsumoto" password="789" />


・ 何千件分


のようにWeb.configにインポート(?)するのでしょうか。

その場合どのようにコーディングすればいいかさっぱり分かりません。
どなたか教えてください。
ASP.NET+VB.NETです。
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2003-07-12 00:49
普通はWeb.configにユーザ名とパスワードを書かないと思います。

よくあるのは、下記のように匿名ユーザを禁止にして
<authorization>
<deny users="?" />
</authorization>

login.aspxのOKボタンのハンドラで承認したら、下記メソッドを呼べばよいと思います。
FormsAuthentication.RedirectFromLoginPage(string ユーザ名, bool 別ブラウザで使用できるか);
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-14 08:55
こんにちは。

 私はデータベースにユーザ/パスワードをしまって、
Form認証用の画面で入力と比較しています。
ぬるぴょん
ベテラン
会議室デビュー日: 2003/06/02
投稿数: 62
投稿日時: 2003-07-14 11:45
catsさん、Jittaさんありがとうございます。

そもそも私の脳内での「認証」という概念があってるのかどうか教えていただきたいのですが・・・。

現在私も認証ページよりユーザ名・パスワードを入力し、データベース上のユーザテーブルの
ユーザ名・パスワードとつき合わせ、合致したらServer.Transfer("Menu.aspx")としています。(Menu.aspxはログイン直後の初期ページ)

上記のやり方のままではユーザが任意のページのURLをアドレス欄に直接入力すると認証ページを通らなくても他のページに行ける。
→それを防止する手段が「認証」。
「認証」されたユーザはログアウトするまでは任意のページに行ける。
→各ページのLoad時に今のユーザが認証されているユーザなのかチェックするコードが必要。

という考え方でいいのでしょうか?
ヘルプや色々な書籍を見てもいまいちピンと来ません。

ちなみにcatsさんの方法を試したところ
Server.Transfer("Menu.aspx")で、Default.aspxが見つかりませんとのエラーが出ました。
RedirectFromLoginPageメソッドのヘルプを見ると
「クエリ文字列内の URL キーの内容に基づいてリダイレクトするか、
または返されるキーがない場合は Default.aspx にリダイレクトします。」
とありますが、どういった意味でしょうか?


申し訳ありませんがよろしくお願いします。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-07-14 12:35
引用:

ぬるぴょんさんの書き込み (2003-07-14 11:45) より:
上記のやり方のままではユーザが任意のページのURLをアドレス欄に直接入力すると認証ページを通らなくても他のページに行ける。
→それを防止する手段が「認証」。
「認証」されたユーザはログアウトするまでは任意のページに行ける。
→各ページのLoad時に今のユーザが認証されているユーザなのかチェックするコードが必要。


だいたいあってると思いますが、Form認証を使うと最後の認証ユーザをチェックする
コードを自分で書く必要がなくなって楽ですね。

引用:

ちなみにcatsさんの方法を試したところ
Server.Transfer("Menu.aspx")で、Default.aspxが見つかりませんとのエラーが出ました。



認証後、最初にみせたいページはどういう名前で作ってますか?
そのページをDefault.aspxにしておけばいいかと。
別の名前を使いたいときは、IISの設定で、一番最初によみにいくページを
指定してあげればいいと思います。

ぬるぴょん
ベテラン
会議室デビュー日: 2003/06/02
投稿数: 62
投稿日時: 2003-07-14 14:46
小野@EACさん、ありがとうございます。

>別の名前を使いたいときは、IISの設定で、一番最初によみにいくページを
>指定してあげればいいと思います。

認証後、最初にみせたいページは「Menu.aspx」というフォームで
IISの「ドキュメント」タブに「Menu.aspx」だけにしましたが、
相変わらずDefault.aspxが見つかりませんとのエラーが出ます。

Menu.aspxをDefault.aspxにするとエラーは出ないんですが
認証前にアドレス欄にDefault.aspxや他のページを直接入力しても自由に行けるんです。

ちなみに RedirectFromLoginPageのあと、Server.Transfer("Menu.aspx")などと
認証後の画面を特に指定しなくてもいいんでしょうか?

申し訳ありませんが、よろしくお願いします。

モデラート
会議室デビュー日: 2003/06/29
投稿数: 9
お住まい・勤務地: 東京都
投稿日時: 2003-07-14 15:45
こんにちは。

私も同様の疑問を持っていました。
ログイン後に飛ばされるページは必ずDefault.aspxでなければいけないのでしょうか?私の場合は慣習的にindex.aspxを使いたいのですが、ログイン後の遷移先の変更の仕方が分からないので、仕方なくDefault.aspxというページを作っています。

なんとも悔しいので、もし宜しければどなたか遷移先のページの変更方法を教えていただけませんでしょうか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-14 20:04
 確か、Server.Transferなんてしなくてもかまいません。
IEの「アドレス」は出していますか?ここにちゃんと書いてあると思いますよ?
こんな風に・・・
[http:]//localhost/Test/WebApplication1/LoginPage.aspx?ReturnUrl=%2fTest%2fWebApplication1%2fWebForm1.aspx

私のは、認証ページが「LoginPage.aspx」で、
最初に表示するページが「WebForm1.aspx」です。
「http://localhost/Test/WebApplication1/」
にアクセスしようとすると、Form認証で「LoginPage.aspx」にとばされます。
この中で認証後、「WebForm1.aspx」に移動します。

※[http:]って書いたら、リンクになるのでした。失礼しました。

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-07-14 20:27 ]

スキルアップ/キャリアアップ(JOB@IT)