- PR -

認証後の認証クッキーからuserdataを参照すると""となる

1
投稿者投稿内容
なあゆ
会議室デビュー日: 2008/07/21
投稿数: 4
投稿日時: 2008-07-21 02:07
いつも大変参考にさせていただいています。

最近VS2008でWebアプリを構築することとなりました。
検索やいろいろ試してはみたつもりですが、どうしても解決できませんでした。
初歩的なミスや勘違い、勉強不足が原因かと思うのですが、
どなたかご教授いただければと思います。

WinXPSP2、IIS5.1、VS2008(VB)、.NETFramework3.5 です。

赤間先生の『.NETエンタープライズWebアプリケーション開発技術大全 Vol.4』を
参考にフォーム認証を実装しようと思っています。

サンプルコードを作成したのですが、認証完了後にダウンロードされた
認証クッキーからuserdataを参照すると必ず""となっています。
(コード実行時、特にエラーにはなっていません)
本来であれば認証クッキーに設定した権限をuserdataから取得し、
アプリ内で各権限による処理を分岐させたいのですが、
そもそも上手く取得できません。

以下は操作・記述内容です。

(1) IISの認証の設定は「匿名アクセス」にチェックをつけました。
(2) Web.config内の<authentication mode="Forms">などの設定も行いました。

Login.aspxにて
(3)-1 認証チケットを作成(userdataに任意の値を設定)
(3)-2 チケットを暗号化し、Response.Cookies.Addでクッキー作成

* (3)-1のコードを実行した段階で コマンドウィンドウを確認したところ.userdataには
  設定した権限が格納されていました。

Global.asax.vbにて
(4) If HttpContext.Current.Request.IsAuthenticated = True Then
    If (TypeOf (HttpContext.Current.User.Identity) Is _
      FormsIdentity) = True Then

Dim fmID As FormsIdentity = DirectCast(HttpContext.Current.User.Identity, FormsIdentity) ……(5)
***省略***
End If
End if

* (5)の段階で コマンドウィンドウを確認したところfmID.ticket.userdataには
  何も入っていませんでした。

(4)はエラーになりませんでした。(5)もエラーにはなりませんでした。
(3)では正常にクッキーが作成されているように見えるのですが、
なぜ(5)でfmID.ticket.userdata=""となっているのか私には理由がわかりません。

初心者ゆえの初歩的ミスを起こしている気がするのですが、
解決の糸口がつかめていません。
どなたか何かご指摘事項や参考URLなどありましたら、
ご教授いただけますでしょうか?
このように投稿することが不慣れなため、足りない情報などありましたら
大変申し訳ござません。
何かありましたら、ご指摘ください。

* 大変申し訳ないのですが、会社の環境ではこちらの会議室に書き込みが
 できないようになっています。(参照は可能)
 もしどなたかから大変参考となるご意見を頂戴した場合、実際に試して
 すのが22日の日中、その結果報告が22日の深夜となってしまいます。
 ご回答いただきました内容によっては22日の夜を待っていただくことに
 なるかと思います。申し訳ありませんがご了承ください。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-07-22 11:21
えと、組み込まれている認証の仕組みを利用せず、独自の仕組みを作ろうとして失敗しているように見えます。
組み込み済みの認証をすなおに利用する方法を考えたほうがいいと思いますが。。。
なあゆ
会議室デビュー日: 2008/07/21
投稿数: 4
投稿日時: 2008-07-23 00:37
どっとねっとふぁんさま。
アドバイスをどうもありがとうございました。

すみません、この方法は私の思い込みのような気がしてきたので
恥ずかしながら確認させていただいてもよろしいでしょうか。

どっとねっとふぁんさまより
 >組み込み済みの認証をすなおに利用する方法を考えたほうがいいと思います
が。。。
とのご回答をいただきましたが、おっしゃられている「組み込み済みの認証」と
いうのは「Windows統合認証」のことでしょうか?

こちらのPC環境の問題でWindows統合認証を利用する方法は不可能な
状態にあります。そのため、.NETでフォーム認証を行うしかないのかな
(ここら辺は知識不足です)とサンプルコードで試していました。
* 実際には認証されたユーザーの権限をDBなどから取得し、
 認証チケット(→認証クッキー)のuserdataに格納してアプリケーション全体で
 利用しようと思っていました。


もし私の認識が異なるようでしたら、ご指摘いただければと思います。
また、Windows統合認証でもない、このような独自の認証方式でもない方法が
他にあるようでしたら、大変恐縮ではありますが検索キーワードや
参考となるようなURLを教えていただければと思います。

以上、よろしくお願いいたします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-07-25 10:38
ASP.NET 2.0以降では、Form認証に対する各種コントロールやそれを実現するための仕組みが組み込まれています。
サンプルレベルであれば、Web管理ツールを実行することで必要なデータベース等も作成してくれます。
ユーザの権限等を利用する方法もきちんと組み込まれていますので、独自の仕組みを一から作るよりはよいのではないかと思います。
http://www.microsoft.com/japan/msdn/asp.net/tips/#Management
このあたりから見てみるのがよいかな。
なあゆ
会議室デビュー日: 2008/07/21
投稿数: 4
投稿日時: 2008-07-27 00:29
どっとねっとふぁんさま

いろいろアドバイスいただき、どうもありがとうございました。
まだざっとしか見れていないのですが、教えていただいた方法で
実現できそうです。

また、これらのLOGINコントロール群については、
気になっていたのですが使い方が今ひとつわからず、
検索してもわかりやすい説明がなかったため、スルーしていました。

教えていただいたURLをきっかけに、もう一度認証周りや
これらのコントロールについて勉強してみます。

なお、そもそもの質問ですが、何かの拍子に原因が判明しましたら
報告させていただきたいと思います。

本当に助かりました。
どうもありがとうございました。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2008-07-27 01:27
クッキーを作成した後のリダイレクトをどのように書いてますか?
FormsAuthentication.RedirectFromLoginPageメソッドだと自動的にクッキーが設定されるっぽいので、これで上書きされてるとかじゃないですかね?
※試してないのでわかりませんが
なあゆ
会議室デビュー日: 2008/07/21
投稿数: 4
投稿日時: 2008-07-28 00:32
なちゃさま
ご指摘どうもありがとうございます。
書き込みいただきまして、大変嬉しく思っています。

なちゃさまご指摘の「クッキー作成後のリダイレクト」ですが、

 >FormsAuthentication.RedirectFromLoginPageメソッド

は使用していませんでした。

不吉な予感がしてきたのですが、私が記述したリダイレクト方法は
LOGINコントロールのプロパティに遷移先ページを設定し、クッキー作成後に

 e.プロパティ名=True

としてリダイレクトさせていました。
(すみません、今VS環境が周りにない状態なのでプロパティ名が
 わかりませんでした。わかりにくくて申し訳ありません)

* 27日のどっとねっとふぁんさまには、「LOGINコントロールの
使い方がよくわからずスルーしていた」と回答しましたが
正確には「使い方がよくわからないくせに、適当に使っていた」
ということになります。
どっとねっとふぁんさま、なちゃさま、すみません・・・。

まだ検証しておりませんが、どっとねっとふぁんさまから
ご教授いただきましたように、LOGINコントロールを利用するには
組み込みの方法だけで認証周りを構築するべきなんじゃないかと
思い始めています。
適当に独自の方法と組み合わせたから、期待する結果が
得られなかったのではないかと・・・。

明日早速いろいろ検証し、結果をご報告させていただきたいと思います。

なちゃさま、貴重なお時間を割いていただき
本当にありがとうございました。
1

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