2009-03-17 8 views
2

私はユーザーがHTTPS経由でクライアント証明書を使用して認証するASP.NETアプリケーションを開発しています。ユーザーはIE7のみを使用しています。ユーザーのセッションの有効期限が切れたときにブラウザのSSL状態をクリアするにはどうすればよいですか?

クライアント証明書の認証に成功すると、プロセスが終了するか、ユーザーが手動でSSLキャッシュをクリアするまでブラウザのSSLキャッシュに残ります。ユーザーがログアウトするたびに、またはセッションが期限切れになるたびにSSLキャッシュをクリアして、システムのセキュリティを向上させたいと考えています。

クライアントは既にスマートカードを使用してシステムにアクセスしています。このシステムは、カードがクライアントコンピュータから削除されたときに証明書を自動的にアンロードしますが、ブラウザキャッシュをまったくクリアしません。純正のユーザーと同じマシンにアクセスできます。私はJavaScriptから実際のキャッシュのクリア行う方法を見つけた

document.execCommand( "ClearAuthenticationCacheを");

ユーザーが明示的にログアウトすると完全に機能します。これは、ユーザーが再度ログインできるようにする前にクライアントでスクリプトを実行できるためです。

注:IE7では、Webサーバー上でHTTPキープアライブが無効になっている場合にのみ、プログラムでキャッシュをクリアできます。

これはちょっと難しいことです。クライアントのセッションの有効期限が切れると、ユーザーが再度ログインしようとする前にブラウザでこれを処理する方法がわかりません。ステータスがクリアされ、ページがサーバー上で実行される前に選択された新しい証明書が必要なため、ログインページにアクセスしたときに状態をクリアできません。

アイデア?問題の長さに対する謝罪ですが、背景は重要です。

答えて

2

気にしない、私は良い解決策を思いついた:ユーザーがログインに成功すると

  • 、我々は、ブラウザを閉じるまで有効期限が切れていない追加のセッションクッキーを作成します。

  • ユーザーが後でログインページに戻り、要求が認証されていない場合、セッションCookieが存在するかどうかを確認します。存在する場合、以前にセッションがあったことがわかっているため、ユーザーが開始したログアウトの場合とまったく同じです。セッションCookieが存在しない場合は、ユーザーが証明書を使用して自動的にログインしようとします。

  • カスタムセッションCookieは、明示的なログアウトごとに削除され、ログインが成功するたびに再設定されます。

は、これは私たちに、ユーザーに最高の体験を提供し、そして証明書が(15分、スライディング)のみ限り、セッションがまだ有効であるとしてキャッシュされることを保証します。また、セッションCookieをユーザーが削除できないため、この動作を回避する方法はありません。セッションCookieを受け入れずにサイトを使用することはできません。

+0

明示的に「ログアウト」するにはどうすればよいですか?これがクライアント側の "ClearAuthenticationCache"へのJS呼び出しである場合、PowerUserはその呼び出しを回避できます(クライアント側のコードをハックする)。 –

+0

Laurentの質問にバンプ –

+0

通常のFormsAuthentication.SignOut()メソッドだけがサーバーにログアウトされます。クライアントの操作はありません。 – Sam

関連する問題