私は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);
これをローカルマシンで実行すると、問題なく動作します。しかし、デプロイされると、要求にクッキーが渡されないか、レスポンスが無視されてしまいますが、いずれの場合も確認する方法がわかりません。
私が必要とする回答を得るのに役立つ場合は、どのようにこれをやっているのか、より詳細な質問は自由にしてください。
同じサーバーマシンにあることは必須ですか?同じマシンで作業している場合や、別のサーバーにいる場合は、動作しません。私はmachineKeyが同じであると確信しています。 –
@JulianoOliveira - Forms Authはサーバーファーム(別のマシン)で動作するため、machine.configのmachineKeyタグのすべての属性(validationKey、decryptionKey、validation、およびdecryption)が同じであることを確認する必要があります。サーバーが異なるサブドメインを表している場合は、FormsAuthentication.SetAuthCookieを呼び出した後、自分の答えにコードを使用する必要があります。 –