ログオフボタンIIS6 ASP.NET基本認証
-
03-07-2019 - |
質問
ASP.NET Webアプリのユーザーには、明示的なログアウトボタンが必要です。基本認証(SSL)でIIS6を使用しています。別のWebページにリダイレクトできますが、ブラウザーはセッションを維持します。私はグーグルで調べて、アクティブなXコントロールを有効にしてIISと通信し、セッションを強制終了する方法を見つけました。私はフォーム認証を許可しない制限された環境にいるため、アクティブなXコントロールも禁止されていません。他の誰かがこの要件を持っていて、どのようにそれを処理しましたか?
それは私が恐れていたものです。私はネット上で同様の答えを見てきましたが、誰かがそれを行う方法を持っていることを望んでいました。お時間をいただきありがとうございます。 history.back()のような戻るボタンを防ぐためにJavaScriptを使用できると思います
解決
私はこれに数日間苦労しました。
IE固有の ' document.execCommand(' ClearAuthenticationCache ');
'を使用することは、誰にとっても良い選択肢ではありません。
1)すべての資格情報をフラッシュします。つまり、ユーザーは、たとえば、Gmailまたは現在認証されている他のWebサイトからもログアウトされます。
2)IEのみです;)
Session.Abandon()を使用してから、Default.aspxにリダイレクトしようとしました。これだけでは十分ではありません。 行われたリクエストが許可されていないことをブラウザに明示的に伝える必要があります。これを行うには、次のようなものを使用します。
response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();
これにより、次のようになります。ユーザーがログアウトボタン== gt;をクリックします。彼は基本的なログインウィンドウを取得します。ただし、エスケープキーを押して(ログインダイアログが消えて)更新ボタンを押すと、ブラウザーは自動的に資格情報を自動的に送信し、ユーザーはログアウトしたと思うかもしれませんが、ログインします。
これを解決する秘Theは、常に一意の「レルム」を吐き出すことです。次に、上記の場合、ブラウザは資格情報を再送信しません。現在の日付と時刻を吐き出すことにしました。
response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();
もう1つ必要なことは、ページをキャッシュしないようブラウザに指示することです:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();
これらのすべてが適切に配置されていると、IEで動作しますが、これまでは、ユーザーが最初にエスケープ(基本ログインダイアログを非表示)を押したときにfirefoxがユーザーにログインするのを防ぐことができませんでした更新(F5)またはブラウザの戻るボタン。
他のヒント
Session.Abandon
メソッドは、Sessionオブジェクトに格納されているすべてのオブジェクトを破棄し、それらのリソースを解放します。 Abandonメソッドを明示的に呼び出さない場合、サーバーはセッションのタイムアウト時にこれらのオブジェクトを破棄します。
ボタンのクリックに応じてSession.Abandonを呼び出しましたか?
編集:
これは古典的な戻るボタンの問題のようです。
戻るボタンについてできることはほとんどありません。ユーザーが新しいウィンドウで現在のページを開いた後、logOutボタンをクリックしたと想像してください。そのページはログアウトしたように見えますが、他のウィンドウのコンテンツにはすぐには影響しません。
彼らがそのウィンドウ内のどこかにナビゲートしようとした場合にのみ、セッションが終了したことが明らかになります。
多くのブラウザは、同様の(ただし同一ではない)方法で戻るボタンを実装しています。前のページに戻ることは、必ずしもHTML / HTTPの視点のナビゲーションではありません。
これは、IE6以降で動作するこの問題の解決策です。
<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>
<script>
function logout()
{
document.execCommand("ClearAuthenticationCache",false);
}
</script>
から発見 http://msdn.microsoft.com/en- us / library / bb250510%28VS.85%29.aspx
Webチームの概要 資格情報をお願いします
Q:Jerry B.は次のように書いています。&quot;ユーザーがリクエストを検証して処理した後、私は彼を無効にしたいと思います。このマシンが誰でも立ち上がることができるオープンな環境にあると仮定すると、ユーザーがWeb上の特定のモジュールにアクセスするたびに新しいチャレンジを投げたいと思います。
A:これは、Internet Explorerチームから頻繁にリクエストされる機能であり、Internet Explorer 6.0 SP1でそれを行う方法を提供してくれた善良な人々がいます。必要なことは、ドキュメントでexecCommandメソッドを呼び出し、ClearAuthenticationCacheをコマンドパラメーターとして次のように渡すことです。
document.execCommand("ClearAuthenticationCache");
このコマンドは、ユーザーが認証を必要とするリソースを要求した場合に、認証のプロンプトが再び表示されるように、キャッシュ内のすべての資格情報をフラッシュします。
これをログアウトリンクボタンに配置すると、IE6 sp1以降で動作します。
OnClientClick="document.execCommand('ClearAuthenticationCache');"