4

まず第一に、私のアプリケーションでは、ログアウトしてもセッションは引き続き有効であり、ログインページにリダイレクトされるだけでなく、同じページにとどまることに注意することが重要です。

そうは言っても、MVCアプリケーションでサインアウトするために使用するこれらの2つの方法のどちらか

FormsAuthentication.SignOut()
WebSecurity.Logout()

効果は同じで、すぐにアクセスした場合、次のプロパティはどちらもログアウトを反映するように変更されません。

User.Identity.Name
Thread.CurrentPrincipal.Identity

今-リダイレクトを実行するか、ページをリロードするだけの場合、明らかにこれらのプロパティはnullユーザーに更新されます。User.Identity.Nameログアウトしたばかりのユーザーを表すという意味ではありません。

ログイン/ログアウト後にフォームのテキストを生成したいので、これは問題ですYou are logged in as XXX-これは、リダイレクトが不可能なAJAX状況にある可能性があります。

IPrincipalログアウト(またはログイン)後に自分自身をリセットするようにトリガーする方法があるかどうか知りたいです。

Redirect()私は通常、電話をかけた直後の人を想定してLogout()いるので、これが問題になることはありませんが、AJAXの状況では、これが常に実用的であるとは限りません。

私の現在の解決策は、自分のラッパーでIDを抽象化することです。したがって、ログアウトしたら、それを更新するだけです。IPrincipal特に誰かがラッパーを介さずに直接アクセスした場合、これがいくつかのあいまいな副作用をもたらす可能性があることを少し心配しています。

4

1 に答える 1

4

これは、フォーム認証に関連する ASP.NET イベント パイプラインの主な制限です。これにより、 KB 記事 900111で説明されているように、リプレイ攻撃に対しても脆弱になります。その記事では、ログオンしているユーザーに関するサーバー側の情報を格納するメンバーシップ プロバイダーを使用する 1 つのソリューションを参照しています。

メンバーシップ プロバイダーは、あなたが考えているアプローチと非常によく似ているようです。組み込みのメンバーシップ プロバイダーの 1 つを使用するか、メンバーシップ プロバイダーとしてカスタム コードを記述することを検討する必要があるのでしょうか。これにより、人々がこのアプローチを理解せず、IPrincipal を直接呼び出すという懸念に対処する必要があります。

あなたの「ログアウトしても同じページにとどまる」は、問題をもう少し前面に出しますが、最終的には、誰もが ASP.NET で抱えているのと同じ根本的なリプレイの問題を明らかにしているだけです (しかし、誰もがそれを解決するわけではありません)。

この関連する質問も役立つ場合があります。

于 2013-02-16T17:55:30.070 に答える