web-dev-qa-db-ja.com

誰がHttpContext.User.IdentityのIsAuthenticatedプロパティを設定するか

このコードはasp.net mvcからのものですRTMソースコード

誰がHttpContext.User.IdentityのIsAuthenticatedプロパティを設定しますか?

   protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
        if (httpContext == null) {
            throw new ArgumentNullException("httpContext");
        }

        IPrincipal user = httpContext.User;
        if (!user.Identity.IsAuthenticated) {
            return false;
        }
    }

メソッド(asp.net mvc 4.0サンプルプロジェクト)を呼び出して設定されたIsAuthenticatedプロパティです。

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

上記のFormsAuth ...メソッド呼び出しの後、asp.net mvc 4.0サンプルプロジェクトのLogOnメソッドのコードをデバッグすると、の実行

User.Identity.IsAuthenticated

まだFALSEを返しています。 LogOffメソッドをデバッグするときのみ

User.Identity.IsAuthenticated

tRUEは言います。では、このプロパティをTRUEおよびWHENに設定しているのは誰ですか?

[〜#〜]更新[〜#〜]

これは[〜#〜] forms [〜#〜]認証についてです!

Asp.net mvcサンプルプロジェクトのLogOnメソッドをデバッグしました。LogOnアクションが返された後、オーバーライドしたAuthorizeCoreメソッドが呼び出され、IsAuthenticatedプロパティがTRUEになりました。

TRUEの設定は、ModelState.Value.Errorコレクションに依存しますか?

エラーコレクションでcount == 0の場合、IsAuthenticatedはTRUE、それ以外の場合、IsAuthenticatedはFALSEです。

確認できますか?

25
Elisabeth

このプロパティは、フォーム認証モジュールがrequestからフォーム認証Cookieを読み取って解析することにより設定されます。あなたがこの振る舞いを観察しているのはそのためと思われるので、私はリクエストを太字にしています。説明させてください。認証が成功したときにFormsAuthentication.SetAuthCookieを呼び出すと、認証クッキーをresponseに追加します。このCookieはクライアントブラウザーに保存され、後続リクエストで送信されます。したがって、ユーザーが認証されたと見なされるのは、後続の要求でのみです。そのため、SetAuthCookieメソッドを呼び出した後は常にリダイレクトする必要があります。このメソッドを呼び出したリクエストの内部では、ユーザーが正しい資格情報を提供したかどうかがわかっているため、IsAuthenticatedプロパティを確認する必要はありません。

24
Darin Dimitrov

プロパティの起源は、Identityのタイプによって異なります。 FormsIdentityの場合、プロパティはtrueを返すだけです。

/// <devdoc>
///    Indicates whether or not authentication took
///    place.
/// </devdoc> 
public  bool                         IsAuthenticated { get { return true;}}

FormsAuthenticationModule.csのコードは、認証後にのみFormsIdentityを割り当てるため、これは理にかなっています。コードは非常に複雑に見えますが、Cookieからチケットを抽出しますが、チケットを検証する場所が見つかりません。

1
Andomar