質問者
サブドメイン名の異なるサーバーで認証を行った際に元サーバーにリダイレクトされない

質問
-
ASP.net2.0アプリケーションのForm認証を
そのアプリケーションとは異なるサーバーで実施しようとしています。アプリケーション: http://app.abc.net/
認証サーバー: http://auth.abc.net/アプリケーション間のフォーム認証
http://msdn2.microsoft.com/ja-jp/library/eb0zx8fc(VS.80).aspx
を参考に、Web.configの設定を行いました。http://app.abc.net/test.aspx に最初にアクセスすると、
認証クッキーがブラウザに無いので認証フォーム
http://auth.abc.net/authform.aspx
にリダイレクトされます。ここまでは良いのですが、認証フォームで
RedirectFromLoginPageメソッドで認証処理を行うと
呼出し元サーバーのaspxページではなく
認証サーバー自身にリダイレクトしようとして
元のページに戻ることができません。
http://app.abc.net/test.aspx ではなくhttp://auth.abc.net/test.aspx
にリダイレクトされてしまいます。どのようにすれば認証後に元のサーバーに
リダイレクトさせることができるのでしょうか?ブラウザのアドレス欄に手動で正しいリダイレクト先を入力すると
正常にアプリケーションが表示されますので、認証クッキーは
発行されています。認証フォームにリダイレクトされた際に、ReturnUrlという
クエリ文字列が追加されますが、ここに元サーバーに関する情報が
含まれていない事が問題のようです。よろしくお願いいたします。
すべての返信
-
認証サーバへのリダイレクトは構成ファイルの forms と authenticate の設定でやっているということですね。この場合、ReturnUrl に対してホスト名を付与するのは困難なので、認証側でリダイレクト先をホスト指定に修正する必要があります。おそらく、認証側も標準の <asp:Login> などを利用されているのだと思いますが、たとえば、 <asp:Login> であれば、ページの Load イベントなどで this.Login1.DestinationPageUrl = http://app.abc.net" + FormsAuthention.GetRedirectUrl(name, false) としたり、カスタム認証を使用しているならば、FormsAuthentication.RedirectFromLoginPage() を使用せず FormsAuthentication.SetAuthCookie() を実施したあとで Response.Direct() を使用すればよさそうです。なお、記載されている KB にあるアプリケーション間セッションの共有設定 (forms と validationkey 等) だけでなく、forms Element の enableCrossAppRedirects 属性も true にしておかないと、アプリケーション間のリダイレクトはできませんのでご注意ください。
-
どっとねっとふぁん さんからの引用 サブドメイン違ってても、クッキーってちゃんと動くんでしたっけ?
大多数のユーザはドメインの異なるホストへ返却されるクッキーの受け入れを拒否する設定でブラウザを利用しているため動作しません。
ですが、ブラウザの設定で許可していれば扱えます。
サブドメインの場合、上例であれば ".abc.net" ドメインに対してクッキーを発行しておけば、(IE的にいうと)ファーストパーティクッキーとして扱われるので、ほとんどのユーザで動作するクッキーを生成できます。(そして、これは KB にあるようなアプリケーション間の共有システムとして ASP.NET がサポートしている動作です)