2

ASP.NETでフォーム認証について読んでいますが、しばらく理解できません。

Jamesはusername-passwordを入力し、それらはデータベースに保存されます。ユーザー名からのCookieが作成され、暗号化され、応答に添付されます。私が理解しているように、リクエストを受け取ったとき、受け取ったCookieがJamesからのものであることを認識して、彼のカスタマイズされたページを表示できるようにする必要があります。

私が理解したいのは、システムがCookieからユーザー名を取得し、dbから彼の情報をロードする方法です。

4

3 に答える 3

6

FormsAuthはストレージに依存しません。データベースを使用する必要はありません。実際、 web.configのユーザー名とパスワードで使用できます。

だから何が起こるか

  1. ユーザーがログインします。
  2. ユーザーは、メンバーシッププロバイダー(SQL、Active DIrectory、web.config、Oracle、MySQLなどを使用できます)に対して認証されます。
  3. フォーム認証トークンはユーザー用に作成され、Cookieを介してユーザーのマシンに配置されます。
  4. 以降の各リクエストは、フォーム認証トークンを読み取り、プロバイダーにクエリを実行してユーザーの詳細を取得します。
  5. ユーザーの詳細は、リクエストのHttpContextと現在のスレッドにユーザーIDを入力するために使用され、コードで使用できるようになります。

コードでは、Pageクラス(WebForms)のUser プロパティ、またはコントローラークラス(MVC)のUserプロパティを確認できます。

現在のスレッドまたは現在のコンテキストを介して取得できますが、特にバックグラウンドタスクの使用を開始すると、IDがスレッドに伝播されないか、コンテキストが変更される可能性があるため、お勧めできません。

ユーザーがログインすると、データベースには何も保存されないことに注意してください。すべてフォーム認証トークンにあり、リクエストごとにストアからユーザーを取得する作業が自動的に行われます。

于 2012-01-17T16:58:07.803 に答える
1

Afaik Forms Authenticationは、データベースに何も保存またはロードしません。データベースを使用してユーザー名とパスワードを保存するか、web.configに配置することができます。ユーザー資格情報を保存して検証する方法はあなた次第であり、フォーム認証とは別に行うことができます。

(データベースまたはその他の論理ストレージに対して)ユーザーを検証したら、FormsAuthenticationを使用して認証Cookieを書き込みます。Cookieの復号化について心配する必要はありません。

ユーザー名は、System.Threading.Thread.CurrentPrincipal.Identity.Nameから取得できます。データベースからユーザーの情報を取得するには、プリンシパルID名の値を使用してデータベースにクエリを実行します。

コメントへの回答

そうです、メンバーシッププロバイダー、Active Directory、または独自のカスタムユーザーデータベースでフォーム認証を使用できます。FormsAuthは、パスワードがweb.configに保存されていない限り、パスワードをまったく気にしません(blowdartのより完全な回答に記載されています)。Cookieを書き込むだけです。Cookieは復号化され、スレッドIDを自動的に作成するために使用されます。

追加情報

これが答えとしてマークされていたとしても、blowdartの応答ははるかに完全です。ASPXページまたはMVCコントローラーで必要な場合は、スレッドからIDを取得しないでください。彼が参照したプロパティを使用してください。

于 2012-01-17T16:44:22.873 に答える
0

User.Identity.Nameを呼び出すことにより、Webフォームでユーザー名を取得します。例:次のようになります。

protected void Page_Load(object sender, EventArgs e)
{
    string userName = User.Identity.Name;
}

ASP.NETはCookieを解釈します。自分で読み取る必要はありません。または、ユーザーとパスワードをDBに保存する方法について質問がありますか?

于 2012-01-17T16:44:27.877 に答える