15

ASP.NET (2.0) アプリケーションでは、FormsAuthentication を使用します。

Global.asax / Application_AuthenticateRequest メソッドで、HttpContext.Current.User が null かどうかを確認します。

フォーム認証 Cookie が存在するかどうか、チケットの有効期限が切れていないかどうか、およびフォーム認証メカニズムがユーザーを検証するジョブを完了したかどうかを知るには、これで十分でしょうか?

そのアプリケーションには特定のページがあり、(いくつかの基準に基づいて) アクセスするために認証を必要としない場合があり、それらを除外するために web.config の別の「場所」ディレクティブに配置するため、これが必要です。 「キャッチオール」フォーム認証から。

つまり、この「場所」でアクセスされたページに保護が必要かどうかを Application_AuthenticateRequest で確認しようとしています。必要な場合は、ユーザーが既に認証されているかどうかを確認するか、ログオンにリダイレクトする必要があります。

編集:答えが示唆するように、おそらく IsAuthenticated を使用します。私がそれをよりよく理解するために、ここに2つのボーナス質問があります:) (他の回答を編集してこれらを追加してください、ありがとう):

  1. IsAuthenticated が true の場合、HttpContext.Current.User には認証されたユーザーのユーザー名が確実に含まれると仮定できますか?

  2. FormsAuthentication が適用され、「location」ディレクティブで除外されるページが少ない場合、HttpContext.Current.User で「匿名ユーザー」になるにはどうすればよいですか?

4

3 に答える 3

29

いいえ、User匿名ユーザーへの参照である可能性があります。チェックしてくださいHttpContext.Current.Request.IsAuthenticated

于 2009-01-21T18:51:42.937 に答える
3

通常は Request.IsAuthenticated を使用します。あなたのアプローチがうまくいくかどうかはわかりませんでした。匿名ログインをサポートしている場合、副作用があるかもしれませんが、そうあるべきだと思われますか?

于 2009-01-21T18:51:12.533 に答える
1

余談ですが、コンテキストがnullでないことも確認してください(httpmoduleで作業している場合)。

于 2009-01-21T19:06:23.360 に答える