0

IIS7.5 で asp.net 2.0 を実行している 2 つの Web サイトが 1 つのサーバー上にあり、フォーム認証で保護されています。

URL は次のようなものです。

 https://customerx.mydomain.com/site1/
 https://customerx.mydomain.com/site2/

両方の Web サイトは同じ Web アプリケーションを実行していますが、異なるフォルダーにあり、異なるデータベースに接続されています。2 つのサイトはSSO (シングル サインオン)用に準備されています。ユーザーはsite1 のログイン ページを開き、自分の資格情報 (フォーム認証、メンバーシップ プロバイダー) で認証します。開始ページにはsite2へのハイパーリンクがあり、site2 の開始ページには site1 へのリンクがあります。したがって、ユーザーはあるサイトから別のサイトにジャンプできます。

SSO は、両方のアプリケーションで次の web.config エントリで解決されました (同じ Cookie 名とマシン キー):

<authentication mode="Forms">
  <forms loginUrl="~/login.aspx" defaultUrl="~/default.aspx" 
         timeout="60" name=".customerxcookie" />
</authentication>
<authorization>
  <deny users="?" />
  <allow users="*" />
</authorization>
<machineKey validationKey="...myvalidationkey..." validation="SHA1" />

各ユーザーには、サイト上のデータを多かれ少なかれ表示するためのいくつかのユーザー権限があります。ユーザー権限を持つユーザー データは、両方のサイトで同じです。

サイト 1 で管理者としてログインし、サイト 2 などにジャンプしてログアウトすると、1 つのサイトからのみログアウトするため、再度ログインせずにサイトの 1 つを開くことはできません。問題はない。ログアウトに LoginStatus コントロールを使用しています。

protected void LoginStatus1_LoggedOut( object sender, EventArgs e )
{
    FormsAuthentication.SignOut();
    Session.Abandon();
}

ここでの問題:管理者のログアウト後 、site1 でより少ない権限を持つユーザー資格情報でログインした場合: site1 では問題ありませんが、site2 にジャンプすると、期待どおりにユーザー名が表示されますが、彼は管理者からのすべての権限を持っています。ユーザー権限で許可されていないすべてのものを見ることができます。

2 つの Cookie (firefox) があることがわかりました。

customerx.mydomain.com      customerxcookie
customerx.mydomain.com      .ASPXANONYMOUS

Cookie customerxcookieを削除すると、次のログインは正常に機能します。しかし、ユーザーを変更するたびにそれを行う必要があります。

助言がありますか?

4

1 に答える 1

1

Cookie の存在が問題である場合は、すべての Cookie を取得し、ログアウト時に手動で期限切れにします。

string[] myCookies = Request.Cookies.AllKeys;
foreach (string cookie in myCookies)
{
  Response.Cookies[cookie].Expires = DateTime.Now.AddDays(-1);
}
于 2013-07-31T14:26:26.557 に答える