- PR -

[ASP.NET]1回のフォーム認証で複数の仮想ディレクトリ内のフォームにアクセスしたい

1
投稿者投稿内容
EOSB200
会議室デビュー日: 2004/04/01
投稿数: 18
投稿日時: 2004-06-05 03:00
今日は。フォーム認証で困っています。

[やりたいこと]
VS.NETで2つのWebアプリケーション(2つのプロジェクト)を作成します。
仮想ディレクトリも2つ出来ます。
ここで作った両方のWebアプリケーション(仮想ディレクトリ)のフォームに、1回のフォーム認証でアクセスしたいのです。
※複数のシステムにシングルサインオンするイメージです。
 後の運用のことを考えて、1システムは1プロジェクトで作りたいです。

[困っていること]
それぞれのWebアプリケーションにフォーム認証を実装すれば、一方のWebアプリケーションで認証が済んでいても、もう一方にアクセスすると再度認証を聞いてきます。
1回の認証で両方にアクセスすることができません。

開発環境はASP.NET + VB.NET(VS.NETにて)です。
低レベルな質問かもしれませんが、色々調査しても実現できませんでした。
ご教授の程、よろしくお願い致します。
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2004-06-07 09:32
似たようなことをやりました。そのときは、
・認証サーバを作る。
・共通ログインページで、IDとパスワードで認証する。
・認証OKなら、認証キーを認証サーバに送り、各アプリに認証キーを渡してRedirectする。
・各アプリは、認証キーで認証サーバに問い合わせる。
・認証サーバでは、一定時間経過した認証キーは削除する。
というような感じでした。(もっといい方法は私も知りたい)
EOSB200
会議室デビュー日: 2004/04/01
投稿数: 18
投稿日時: 2004-06-16 01:31
返答が遅くなり申し訳ありません。
catsさんから教えて頂いた内容を色々調査したのですが、大がかりな仕組みになりそうですね。
私の場合は1システム1Webアプリケーションプロジェクトで作成するのが目的ですので、IISの仮想ディレクトリを複数作成せずに1つの仮想ディレクトリ内に複数のWebアプリケーションプロジェクトを作成する方法に決めました。
マイクロソフトのサポート技術情報を参考にして、メインのWebアプリケーションプロジェクトにフォーム認証を実装し、子Webアプリケーションプロジェクトを複数参加させることによって子Webアプリケーション間で認証を共有することが出来ました。

マイクロソフトのサポート技術情報
http://support.microsoft.com/default.aspx?scid=kb;ja;JP307467

#ちなみに、この方法で作成したメインのWebアプリケーションプロジェクトをVS.NETで開くと「プロジェクトの更新に失敗しました。 フォルダ情報をサーバーから取得できません。」というエラーメッセージが表示されます。動作や開発には問題なさそうですが、少し気になっています。何か情報をお持ちの方がおられましたらご教授の程、よろしくお願い致します。

ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2004-06-16 09:21
もう別の方法でやられているようですが、一応MSDNヘルプから。

アプリケーション間のフォーム認証
system.web - authentication - forms 要素
system.web - machineKey 要素

フォーム認証はただのCookieを使ってやるのでPathをいじれば認証チケットの有効範囲を設定できます。その上で、暗号化/復元に暗号化キー等も一致させればOKなはずです。ただ、Cookieなため、サーバー(ホスト)は超えられません。

[ メッセージ編集済み 編集者: ya 編集日時 2004-06-16 09:22 ]
EOSB200
会議室デビュー日: 2004/04/01
投稿数: 18
投稿日時: 2004-06-16 14:10
yaさん情報ありがとうございます!
web.configの設定を変更するだけで、うまくいきました!!
サーバーを越えた認証は今のところ想定しなくて良いので、この方法にします。

「authentication - forms 要素」は元々統一していたので、「machineKey 要素」に「validationKey」と「decryptionKey」を追加すると、すんなり、別々のプロジェクトで作成したWebアプリケーション間で認証を共有できました。
(1回認証すれば他のWebアプリケーションでは認証を聞いてこない。)

プロジェクトの構成は次の通りにしようと思います。
※全プロジェクトでweb.configのauthentication-forms要素、machineKey要素設定は統一する
・認証用のWebアプリケーションプロジェクト
 各Webアプリケーションの認証や、各システムへリンクするトップメニューとして共通で使用する。
・各システムのWebアプリケーションプロジェクト
 認証のプログラムは含まず、web.configのみ統一する。(loginUrlは認証用のWebアプリケーション内の認証用フォームを指定。)
 VS.NETで普通にWebアプリケーションプロジェクトを作成し、仮想ディレクトリが作成されるがそのまま利用する。

この方法でいくと、各システムを本番移行する場合もweb.configの記述だけ気を付けていれば良いので助かります。
私が前に投稿した子WebアプリケーションをメインWebアプリケーションに参加させる方法であるとdll等の本番移行が面倒ですし間違いが発生する可能性があるので・・・
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2004-06-16 15:39
formsとmachineKeyの設定だけで私もできました。
すばらしいです。
1

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