2011-09-08 9 views
1

ユーザーを認証し、アプリケーションキャッシュに認証オブジェクトを〜10時間保存するために、HTTPModule(dllでラップされた)を使用するいくつかのWebサイトがあります。次に、ユーザーのマシンにキャッシュキーを含むCookieを設定します。ASP.Netアプリケーションコンテキストデータ共有

私は現在、管理者が特定のユーザのすべてのウェブサイトの特定のキャッシュオブジェクトをクリアして(効果的にログアウトする)、次回の訪問時に自動的に(Windows認証で)ログインする方法を模索していますいずれかのサイト。

私は、ログインをリセットする機能を備えた単一の管理Webサイトを計画していましたが、明白なセキュリティ上の理由から他のWebサイトのアプリケーションキャッシュを変更することはできません。

認証モジュールを使用するサイトに信号を渡して、自分のアプリケーションキャッシュをクリアする方法はありますか?

メモ:私はmemcachedを読んでいますが、できるだけ「標準ASP.NET」ではない解決策を避けたいと思います。ここで

答えて

1

は2つのアイデアです:

  • 、彼らが同じサーバー上にある場合、あなたはすべてのプロジェクトがアクセスできるファイルシステム内のアクティブなログインを含むファイルを持つことができます。
  • 各プロジェクトに汎用ハンドラを追加します。このハンドラは、特定のユーザのログインをリセットします。彼がそこにログアウトしたら、別のプロジェクトからこれを呼び出します。セキュリティ上の理由から、パスフレーズを追加することができます。

EDIT:私はよりよい解決策を考えた:

  • ログイン状況を追跡中央の「認証」プロジェクトを作成します。ユーザーをログアウトするか、自分のステータスを確認するには、ウェブサイト(例:一般的なハンドラ、ウェブサービスなど)から呼び出します。
+0

HttpApplication.BeginRequestのリクエストを分析し、URLがいくつかの条件に一致する場合にキャッシュクリアコードを実行することによって、ジェネリックハンドラの形式に傾いています。それはそれを呼び出すために、各ウェブサイトのURLの中央リストを維持することを意味します。 –

+0

真実ですが、ウェブサイト間の直接のコミュニケーションを望むあらゆる種類のソリューションでこのリストが必要になります。私はちょうど別の、おそらくより良い方法を考え、私の答えにそれを編集します。 – magnattic

+0

私はすでにこれを管理している中央サイトを持っていますが、認証されたユーザーのアクセス許可を要求元のプロジェクトに戻してキャッシュできます。このデータを中央プロジェクトにキャッシュすると、ユーザー権限を得るために消費するプロジェクトがセントラル認証サイトに問い合わせる必要があるため、目標を守りません。私は "キャッシュ22"の状況で、私はハハーだと思う。 –

0

私は、既存のHTTPModuleにコードをピギーバックすることを選択しました。

カスタムユーザーエージェント文字列が存在するかどうかを確認します。クエリ文字列に基づいて関連するキャッシュエントリをクリアし、成功するとカスタムHTTPヘッダーを返します。

唯一の余分なオーバーヘッドは、私が暮らすことができるリクエストごとにユーザーエージェントをチェックすることです。

この設定では、セントラルサイトのWebRequestオブジェクト(私のカスタムユーザーエージェント文字列を挿入する)を使用して、モジュールを使用してすべてのサイトにメッセージを送信できるようになりました。

関連する問題