- PR -

フォーム認証でリダイレクト先が変わる

1
投稿者投稿内容
ぴかぴか
会議室デビュー日: 2005/08/11
投稿数: 3
投稿日時: 2005-08-11 15:04
いつも拝見させてもらってます。

フォーム認証をした後に要求元URLへリダイレクトすると
思うのですが、このリダイレクト先が変わってしまいます。

具体的には、

http://localhost/Webアプリ名/login.aspx?ReturnUrl=default.aspx

としたいのですが、ページの遷移を
login.aspx → default.aspx → Hoge1.aspx → Hoge2.aspx
のように遷移し、Hoge2.aspx でSessionが切れた場合に、
リダイレクトされるURLが
http://localhost/Webアプリ名/login.aspx?ReturnUrl=Hoge2.aspx
になってしまいます。
これを
http://localhost/Webアプリ名/login.aspx?ReturnUrl=default.aspx
としたいのですが。

何か設定及び処理が足りないのでしょうか?
ご教授お願い致します。

また、Web.config以下のように設定済みです。
<authentication mode="Forms">
  <forms name="Webアプリ名" loginUrl="Login.aspx"
  protection="All" imeout="1" />
</authentication>

たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-08-11 15:33
私も同じ現象になったことがあります。

根本的な解決策は詳しい方にお任せします。


Session変数にフラグをもっておけば期待するルートを経ているかどうかチェックできると思いますよ。

_________________
たつごろー
codeseek
こみゅぷらす
ぴかぴか
会議室デビュー日: 2005/08/11
投稿数: 3
投稿日時: 2005-08-11 16:12
たつごろーさん、早速の回答ありがとうございます。
実は、フォーム認証を使用しない方法では、Sessionの有無を監視して
強制的にloginページへ遷移する方法は、実装しております。

同様の事がフォーム認証を利用することで、もっと簡単に実装出来るのでは?
と思い検証しているのですが…なかなか思うように動いてくれません。
VisualStudioの
FormsAuthentication.RedirectFromLoginPage メソッド のヘルプに記載してある

RedirectFromLoginPage メソッドを呼び出すと、クエリ文字列に指定された戻り先 URL キーにリダイレクトされます。たとえば、 http://www.contoso.com/login.aspx?ReturnUrl=caller.aspx という URL の場合、 caller.aspx が RedirectFromLoginPage のリダイレクト先となる戻り先 URL となります。戻り先キーがない場合、 RedirectFromLoginPage は Default.aspx にリダイレクトします。

このヘルプ文章のcaller.aspxを、ひとつのページ(default.aspx)にしたいのですが。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-08-11 16:17
引用:

ぴかぴかさんの書き込み (2005-08-11 15:04) より:

フォーム認証をした後に要求元URLへリダイレクトすると
思うのですが、このリダイレクト先が変わってしまいます。


うーん、これをやってくれるのもフォーム認証の利点の一つだと思いますが…
※変わってしまうんじゃなくて、変えてくれているんですよね?

現在どのようにコーディングしているのか分かりませんが、RedirectFromLoginPageを使っているのなら、
認証クッキーの設定とリダイレクトを別々に自分で書いてやれば好きに制御することが出来たはずです。
※細かいことは覚えてないですが、ASP.NETフォーム認証関連の使い方を調べたら載ってると思います。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2005-08-11 16:49
引用:

ぴかぴかさんの書き込み (2005-08-11 15:04) より:

フォーム認証をした後に要求元URLへリダイレクトすると
思うのですが、このリダイレクト先が変わってしまいます。



要求元URLが変わっているのだから、リダイレクト先がそれに
ともなって変わるのは当然のことですよね。
で、ぴかぴかさんがやろうとしているのはリダイレクト先を
要求元URLに関係なく固定化したい、ということですね。

この場合、RedirectFromLoginPageメソッドではなく、
SetAuthCookieメソッドを利用します。
SetAuthCookieメソッドで認証したというチケットをブラウザに
渡すよう設定し、リダイレクト自体はResponse.Redirectを使って
遷移させればよいと思います。

#って、なちゃさんが書いてますね。
ぴかぴか
会議室デビュー日: 2005/08/11
投稿数: 3
投稿日時: 2005-08-11 16:54
なちゃさん、早速の回答ありがとうございます。
なちゃさんの回答で理解出来ました。
RedirectFromLoginPageメソッドについて、勘違いをしていたようです。
最初の説明が足りなかったのですが・・・
loginページからのページ構成がウィザード方式で遷移するよう
なアプリケーションを構築したいと考えておりました。
ページの遷移は、以下の通り。
login.aspx → Hoge1.aspx → Hoge2.aspx → Mainメニュー.aspx
RedirectFromLoginPageを使用した時にMainメニュー.aspxで
Sessionタイムアウトを検知すると、login.aspxにリダイレクトされます。
このときのURLは・・・
http://localhost/Webアプリ名/login.aspx?ReturnUrl=Main.aspx
となり、再度login.aspxで認証をすると、Main.aspxに遷移してしまいました。
そこで、 RedirectFromLoginPageメソッドを止めて、SetAuthCookieメソッドで
認証Cookieのみを保持し、Hoge1.aspxへ遷移するようにしたところ、
期待通りの動作がしました。
ただし、相変わらず、URLが
http://localhost/Webアプリ名/login.aspx?ReturnUrl=Main.aspx
と表示されますが。
皆さん、どうもありがとうございました。m(_ _)m
1

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