仮想サーバーで共有されている 2 つの asp.net Web フォーム アプリケーションがあります。すべてがうまく機能していました。別のベンダーの同じ仕様の新しい仮想サーバーに移行する必要がありました。
最初の Web フォーム アプリケーションはうまく機能します。
問題は、2 番目の Web フォーム アプリケーションがユーザーの認証を許可しないことです。asp.net フォーム ベースの認証を使用しています。何らかの理由で、フォーム認証チケットを発行していません。開発環境でプロジェクトを再実行したところ、認証はうまく機能しました。
IIS が正しく構成されていないのか、それとも他の何かが正しく設定されていないのかはわかりません。新しいサーバーと古いサーバーをトリプル チェックしましたが、IIS の設定はすべて同一のようです。asp.net 4.0 を使用しており、IIS ホスト ヘッダーを使用して 2 つのサイト間の要求を区別しています。
数時間のテストと調査の結果、実稼働サーバーの 2 番目の Web サイトは Internet Explorer 9 と 10 でのみユーザー認証に失敗するという結論に達しました。他のすべてのブラウザーは正常に動作します。IE9 または 10 の互換モードで Web サイトを実行すると、それも機能します。
コードでフォーム認証チケットを発行する方法は次のとおりです。
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, //Ticket Version
"", //Associated User Name
DateTime.Now, //Date/Time Issued
DateTime.Now.AddMinutes(60), //Time to expire
false, //Persistent Cookie
user_id, //User-Data --- User Role
FormsAuthentication.FormsCookiePath); // Cookie Path
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
if (ticket.IsPersistent)
{
cookie.Expires = ticket.Expiration;
}
//Add cookie to the list
Response.Cookies.Add(cookie);
Web.Config ファイルでの認証設定は次のとおりです。
<authentication mode="Forms">
<forms loginUrl="Login.aspx" protection="All" timeout="90" path="/" name=".survey" requireSSL="false" slidingExpiration="true" defaultUrl="survey.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/>
</authentication>
<authorization>
<deny users="?"/>
<allow roles="Standard, Admin"/>
</authorization>
これが他のことです。最初の Web フォーム アプリケーション (動作するアプリケーション) は、同じ基本認証コードを使用します。すべてのブラウザでうまく機能します。2 つのアプリケーションの認証の唯一の違いは、最初のアプリケーション (動作するアプリケーション) が SSL を必要とすることです。
これは、私が今まで遭遇した中で最もユニークなエラーです。何かアドバイスがあれば教えてください。また、詳しい情報を提供できる場合もお知らせください。
ご協力いただきありがとうございます。