web-dev-qa-db-ja.com

Request.IsAuthenticatedはどのように機能しますか?

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

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

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

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

49
MetaGuru

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

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

フォームベースのアプリケーションを使用しています。 IsAuthenticatedプロパティがTrueだった場所で、Falseになり、期待どおりに動作しなかったことに気付きました。無効な設定がありますか?

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

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

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

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

リクエストの開始時に、Context.User.Idenityには、ユーザー名がnullのGenericIdentityが含まれます。このオブジェクトのIsAuthenticatedプロパティはfalseを返すため、Request.IsAuthenticatedfalseになります。認証モジュールがApplication_AuthenticateRequestイベントを処理し、ユーザーを正常に認証すると、Context.User.Identity内のGenericIdentityが、IIdentityを返す新しいtrueオブジェクトに置き換えられます。 IsAuthenticatedプロパティ。 Request.IsAuthenticatedtrueを返します。

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

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

59
Oliver

ダニエル・ケントによる非常に詳細な投稿があります ここ 。 (スニペット)

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

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

8
keyboardP