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

  • 質問

  • 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という
    クエリ文字列が追加されますが、ここに元サーバーに関する情報が
    含まれていない事が問題のようです。

    よろしくお願いいたします。

    2007年3月12日 8:38

すべての返信

  • 認証をどういう方法で行っているかがわかりませんが、認証時に戻り先をプログラムから設定してあげればとりあえず動くんじゃないかと思います。

    #サブドメイン違ってても、クッキーってちゃんと動くんでしたっけ?
     そこがよくわからない。。。

    2007年3月12日 9:03
  • 認証サーバへのリダイレクトは構成ファイルの 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 にしておかないと、アプリケーション間のリダイレクトはできませんのでご注意ください。
     
    2007年3月13日 18:07
  •  どっとねっとふぁん さんからの引用

    サブドメイン違ってても、クッキーってちゃんと動くんでしたっけ?

    大多数のユーザはドメインの異なるホストへ返却されるクッキーの受け入れを拒否する設定でブラウザを利用しているため動作しません。

    ですが、ブラウザの設定で許可していれば扱えます。

    サブドメインの場合、上例であれば ".abc.net" ドメインに対してクッキーを発行しておけば、(IE的にいうと)ファーストパーティクッキーとして扱われるので、ほとんどのユーザで動作するクッキーを生成できます。(そして、これは KB にあるようなアプリケーション間の共有システムとして ASP.NET がサポートしている動作です)

     

    2007年3月13日 18:09