2011-08-15 37 views
2

私は2つのMVC3サイトを持ち、どちらも同じ認証Cookieを使用するよう設定したサーバーと同じサーバーにホストされています。ASP .NETのクロスサイトフォーム認証は、開発環境では動作しますが、運用環境では動作しません。

最初のサイトは、Windows認証を使用するイントラネットサイトです。このサイトには、ユーザーが認証されているかどうかを確認する単純なアクションが1つあります。ユーザーがいた場合は、応答に追加するFormsAuthentication Cookieが作成されます。このCookieは、ユーザーのADグループから決定した汎用ユーザー用に作成されます。応答はフォーム認証を使用する2番目のサイトにユーザーをリダイレクトします。

これをローカルマシンで実行すると、上記のようにすべて動作します。これを私たちのローカルWebサーバーにデプロイすると、それはありません。私は、ユーザーのグループが正しく決定され、Cookieの有効なユーザーが作成されているかどうかを確認するためにテストしましたが、これがWebサーバー上で正しいことを確認しました。ここで

は、私は上記のすべてをやっている方法です:

まず、私は両方のサイトは、暗号化と復号化に同じ同じマシンキーを使用して作られました。

私はSite1でCookieを作成するとき、Site2で作成されたCookieと同じ名前とドメインを持つことを確認します。

 var cookie = FormsAuthentication.GetAuthCookie(userName, false); 
    cookie.Domain = FormsAuthentication.CookieDomain; //This is the Domain of my 2nd site as they are different 

    HttpContext.Response.Cookies.Add(cookie); //Add my cookie to the response 
    HttpContext.Response.RedirectPermanent(urlForSite2); 

これをローカルマシンで実行すると、問題なく動作します。しかし、デプロイされると、要求にクッキーが渡されないか、レスポンスが無視されてしまいますが、いずれの場合も確認する方法がわかりません。

私が必要とする回答を得るのに役立つ場合は、どのようにこれをやっているのか、より詳細な質問は自由にしてください。

答えて

1

クロスドメインのCookieは許可されません。 2つの別々のドメインがある場合。他のクッキーにアクセスすることはできません。同じマシンキーを使用する場合、2つの別個の仮想ディレクトリ/アプリケーションが動作します。 http://blogs.technet.com/b/sandy9182/archive/2007/05/07/sharing-forms-cookie-between-asp-net-web-application.aspx

サブドメイン間でログインCookieを共有する場合は、ログインCookieのドメインプロパティを第2レベルのドメイン「abc.com」に編集して、「www.abc.com」と「ww2」にする必要があります。 abc.com "はCookieにアクセスします。 http://forums.asp.net/t/1533660.aspx

String usrName = User.Identity.Name.ToString(); 
HttpCookie authCookie = Security.FormsAuthentication.GetAuthCookie(usrName, false); 
authCookie.Domain = "abc.com"; 
Response.AppendCookie(authCookie); 
+0

同じサーバーマシンにあることは必須ですか?同じマシンで作業している場合や、別のサーバーにいる場合は、動作しません。私はmachineKeyが同じであると確信しています。 –

+0

@JulianoOliveira - Forms Authはサーバーファーム(別のマシン)で動作するため、machine.configのmachineKeyタグのすべての属性(validationKey、decryptionKey、validation、およびdecryption)が同じであることを確認する必要があります。サーバーが異なるサブドメインを表している場合は、FormsAuthentication.SetAuthCookieを呼び出した後、自分の答えにコードを使用する必要があります。 –

0

実は、それは可能ですが、ドメイン/サブドメインのクッキーを共有するように単純ではありません。

http://www.codeproject.com/KB/aspnet/CrossDomainSSOModel.aspx

この記事で与えられた例では、私が何をしていたかに直接適用されませんでしたが、私は私が働いて必要なものを得るためにそこに表現のアイデアのいくつかを使用することができます。それは、site2 web.configの設定になってしまった。

サイト1は、ホストしているマシンの特定のIPアドレスにそれを対処するホストエントリを必要とし、次のように

私のURLがあります。 IEセキュリティ設定 - ローカルイントラネットサイトのエントリです。

これらのアプリケーションは、両方とも同じ既定のWebサイトで実行されている仮想ディレクトリであることに注意してください。

私は自分の問題を解決したが、設定ファイルのドメインを空文字列に設定していると思ったが、これはうまくいかなかった。私は今何ができるか分からない。これは私のローカルマシンで実行するとまだ動作しますが、自分のサーバーで実行しているときは動作しません。唯一の違いはURLです。 http://localhost/CompanyName.TVAP.IntranetSite

  • サイト2:私は、これはいくつかの明確化を追加します願っていますhttp://localhost/TVAPDev/
  • 私のdevのマシンは、URL

    • サイト1を使用しています。この回答は実際に私の質問の編集として掲示されるべきですが、私が最初に投稿したとき、私はそれが働いていると思いました。

      更新:私の答えは上記のURLにあると思います。私の開発マシンのURLはどちらも同じドメイン名を使用しています。この場合はlocalhostです。私は配備されたウェブサイトを同じドメインを使用するように変更すると、私はOKになります。私はそれがうまくいくと私は更新を掲載します。

    +0

    上記のように私のローカルIISサーバ上で、devマシンのURLを使用すると、私のweb.configのフォーム設定にDomain属性を空の文字列のままにしておく必要があります。 –

    関連する問題