58

MSDN コード サンプルの説明: 次のコード例では、IsAuthenticated プロパティを使用して、現在の要求が認証されているかどうかを判断します。認証されていない場合、要求は別のページにリダイレクトされます。このページでは、ユーザーが自分の資格情報を Web アプリケーションに入力できます。これは、アプリケーションのデフォルト ページで使用される一般的な手法です。

これは素晴らしいですが、詳細などはありません...

正確には何をチェックしていますか?true に設定するにはどうすればよいですか?

さらに一歩進んでください: これに関する詳細なドキュメントはどこにありますか?

4

3 に答える 3

68

Google のおかげで、@keyboardP が彼の回答で参照している投稿のキャッシュ バージョンを見つけました。元のリンクが壊れているため (2012-12-06)、他の人への参照としてその回答/投稿をここに投稿します。

以下の回答が参照する元の質問:

私はフォームベースのアプリケーションを持っていますが、それは私にぴったりです。IsAuthenticated プロパティが True だった場所が、今度は false になり、期待どおりに機能していないことに気付きました。無効な設定があるのだろうか??

IsAuthenticated プロパティを True に設定するもの、つまりログインを構成するものを教えてください。

ダニエル・ケントによる回答:

Request.IsAuthenticatedフォーム認証だけでなく、使用されている認証の種類 (Windows、Passport、フォーム、または独自のカスタム スキーム) に関係なく有効です。

HttpRequest.IsAuthenticatedリクエストを行ったユーザーが認証された場合に true になります。基本的に、このプロパティは と同じ情報を提供しますContext.User.Identity.IsAuthenticated

リクエストの開始時に、 ユーザー名が nullContext.User.Idenityの が含まれます。このオブジェクトのプロパティが返さGenericIdentityれるので、になります。認証モジュールがイベントを処理し、ユーザーの認証に成功すると、 in をそのプロパティから返される新しいオブジェクトに置き換えます。戻ります。IsAuthenticatedfalseRequest.IsAuthenticatedfalseApplication_AuthenticateRequestGenericIdentityContext.User.IdentityIIdentitytrueIsAuthenticatedRequest.IsAuthenticatedtrue

フォーム認証の場合、フォーム認証モジュールは、認証 Cookie に含まれる暗号化された認証チケットを使用してユーザーを認証します。これが完了すると、 GenericIdentityinContext.User.IdentityをそのプロパティからFormsIdentity返されるオブジェクトに置き換えます。TrueIsAuthenticated

したがって、に設定IsAuthenticatedすることtrueは実際にはログインとは異なります。Jeff が言うように、フォーム認証へのログインは、認証チケットが生成され、Cookie としてクライアントに送信されるときに行われます。(RedirectFromLoginPageまたはSetAuthCookie) 私たちが話しているの IsAuthenticatedは、各ページ要求で発生する認証です。ログインは、ユーザーが資格情報を入力してチケットが発行されると発生し、認証はリクエストごとに発生します。

于 2012-12-06T16:40:10.057 に答える
0

HttpRequest IsAuthenticated を逆コンパイルするとこんな感じ

    public bool IsAuthenticated {
        get {
            return(_context.User != null
                    && _context.User.Identity != null
                    && _context.User.Identity.IsAuthenticated);
        }
    }

1373 行目 https://referencesource.microsoft.com/#system.web/HttpRequest.cs

于 2021-09-01T02:56:40.800 に答える