0

カスタムActionFilterAttributeのOnActionExecutingメソッド中に、いくつかのアクションを実行する前に、ユーザーがまだログインしていることを確認します。これを行うには、次の擬似コードと同様のことを行います。

public override void OnActionExecuting( ActionExecutingContext filterContext )
{
    if ( filterContext.HttpContext.User.Identity.IsAuthenticated )
    {
        // Do something...
    }
}

同じドメインで実行される複数のクライアント用に複数のサイトがありますが、違いは仮想ディレクトリ名だけです。各仮想ディレクトリは実際には同じフォルダ/コードベースを指し、URL / virdir名は、ネストされた/Clientsディレクトリから使用する「クライアント構成ファイル」をコードに示します。サイト/コード/IIS構成の詳細が必要かどうかはわかりませんが、問題の原因となった場合に備えて提供してください。

ブラウザの複数のインスタンスを使用して複数のサイトにサインオンしようとすると、すべてが正常に機能します。サイト内を移動しようとすると、IsAuthenticatedチェックがtrueを返します。

ただし、複数のタブを備えた単一のブラウザを使用して複数のサイトにサインオンしようとすると、ログアウトし続けます。サイトAにサインインすると、ナビゲートできますが、サイトBにサインインするとすぐに、サイトAのどこかにナビゲートしようとすると、IsAuthenticatedはfalseを返します。

これは予想される動作ですか?これに対する回避策はありますか?

更新:IEでのみこの動作を再現できるようになりました。FirefoxとChromeでは、同じブラウザ/マルチタブまたはマルチブラウザのどちらを使用していても、ログイン画面が表示されます。IEがCookieを処理する方法に違いはありますか?それとも、クッキーが原因ではありませんか?

4

1 に答える 1

0

セットアップをこれ以上詳しく知らなくても、これが起こっていると私は予想しています。

仮定:

  1. 1つのコードベースを指す複数の仮想ディレクトリがあると述べています。
  2. これらの各仮想ディレクトリは、アプリケーションがIISであるために設定される可能性があります。
  3. web.configにマシンキーが定義されていないため、各仮想ディレクトリが独自の暗号化/復号化キーを自動生成しました

おそらく何が起こっているのか:

  1. 異なるブラウザからサインインすると、各ブラウザに認証Cookieが与えられます。別のブラウザを使用しているため、問題はありません。
  2. 同じブラウザを使用する場合は、サイトAにログインすると、siteAの自動生成キーで暗号化された暗号化されたCookieが提供されます。
  3. 自動生成されたマシンキーが異なる別の仮想ディレクトリに移動しようとすると、サイトは認証チケットを読み取れない(復号化できない)ため、logined=falseを返します。
  4. siteBにログインすると、認証CookieはsiteBからの認証チケットに置き換えられます。この時点で、siteAは認証チケットを復号化できなくなり、logined=falseを返します。

適切なオプションを使用して、web.configのマシンキー構成セクションを設定してみてください(machineKey要素のMSDN)。 フォーム認証チケットとプロセスに関する詳細情報もあります

于 2012-07-26T02:33:19.970 に答える