1

ASP.NET MVC での認証のしくみを理解しようとしています。組み込みの MembershipProvider が舞台裏でローカル データベースを作成することは望ましくありません。また、カスタム メンバーシップ プロバイダーについて説明しているブログ投稿もいくつか見てきました。より単純なフォーム認証モデルを探していたところ、次のことがわかりました。

FormsAuthentication.SetAuthCookie("myusername", true);
FormsAuthentication.SignOut();

アイデアは、ユーザー名とソルト化されたハッシュ化されたパスワードをデータベースに送信し、それらがそこのレコードと一致するかどうかを確認することです。ユーザーが存在する場合は、ユーザー名を SethAuthCookie に渡します。私の質問は次のとおりです。

  • ユーザー名を暗号化する必要がありますか?
  • 複数のサーバーがあり、ユーザーが Web サイトを閲覧している場合はどうなりますか? サーバーのいずれかがユーザーにコンテンツを提供できると思いますが、ユーザーが認証されているかどうかをどのように知ることができますか?
  • プロバイダーなしで MVC でユーザーを認証するための推奨される方法は何ですか? 私は正しい軌道に乗っていますか、それとも何か他のことを調べるべきですか?
4

1 に答える 1

3

ユーザー名は暗号化する必要がありますか?

いいえ。

複数のサーバーがあり、ユーザーがWebサイトを閲覧している場合はどうなりますか?どのサーバーでもユーザーにコンテンツを提供できると思いますが、ユーザーが認証されているかどうかをどのようにして知ることができますか?

リクエストごとに、サーバーはクライアントブラウザによって送信され、FormsAuthentication.SetAuthCookie呼び出しによって生成された認証Cookieを読み取り、それを復号化して、内部に保存されているユーザー名を取得します。サーバーファームのすべてのノードに同じマシンキーを設定していることを確認してください。これにより、どのノードが認証Cookieを発行したかに関係なく、他のすべてのノードがそれを復号化できます。

プロバイダーなしでMVCでユーザーを認証するための好ましい方法は何ですか?私は正しい方向に進んでいますか、それとも他のことを検討する必要がありますか?

あなたは正しい方向に進んでいます。FormsAuthentication.SetAuthCookieパスワードハッシュがデータベース内のユーザーの1つと一致することを確認したら、このメソッドを使用して認証Cookieを発行します。その後のアクションでは、User.Identity.Nameプロパティを使用して現在認証されているユーザーを取得できます。

ASP.NETでフォーム認証がどのように機能するかについての概要を説明している次の記事も確認することをお勧めします。

于 2012-04-23T06:09:34.657 に答える