2

カスタムMembershipProviderを実装しようとすると、誰かが私の頭を包み込むのを手伝ってくれることを願っています。これはおそらくコードの質問というよりも理論の質問です...これが私が持っているものです:

  • MVC 2アプリ(空のMVC 2プロジェクトから開始)
  • 独自の「users」テーブルを持つSQLServerDB
  • Userクラス、UserRepository、UserService、何とか何とか何とか

現在、私のアプリケーションは、成功した場合にUserオブジェクトを返すUserRepositoryを介して認証します。次に、このUserオブジェクトはセッションに保存され、その後、認証を必要とするすべてのコントローラーアクションによって問い合わせられます。

これをセッションに保存すると、セッションハイジャックに対して脆弱になり、より安全な方法は自分のMembershipProviderを実装することになることを理解しています。私が理解していないのは、このカスタムプロバイダーが私のUserオブジェクトをどこに保存するのかということです。オーバーライドされたValidateUser()メソッドはブール値を返すだけですが、そのユーザーがサイト上でその情報を保持している場所がわかりません。

ユーザー認証のセッションへの依存を取り除くことで、既存のプロセスをより安全にしながら、維持したいと思っています。ユーザーがログインしたら、アプリケーション全体で完全なユーザーオブジェクトを自由に使用できるようにするのが好きですが、それ以外の場合は提案を受け入れることができます。MembershipProviderドキュメントの多くはちょっとブラックボックスのようです。ユーザー認証を永続化するために、内部で実際に何が行われているのかを誰かが説明できることを期待しています。

前もって感謝します

4

5 に答える 5

1

すべての答えは別として、あなたの投稿に欠けているリンクはASP.Netフォーム認証だと思います-これは実際にはASP.NetWebアプリケーションでASP.Netメンバーシップを使用するものです。

したがって、独自のデータベースと認証スキームが(すでに)配置されている場合は、メンバーシップで機能させようとしなくても、フォーム認証を使用できます(実際にはそうする必要はありません)。

これは(すぐに私の最もよく使われるリンクになります)、ハードコーディングされたスキームを使用したフォーム認証の非常に単純化されたMSDNの例です。それはあなたがそのようにそれをすることさえできることをあなたに示します-もちろんあなたがそうすべきであるということではなく、ただあなたに可能性を示します。

上記のすべての回答が述べているように、必要に応じて独自のプロバイダーを構築できます。私が(これまでに)行った中で最も遠いのは、それを構築することではなく、いくつかのメソッドをカスタマイズすることだけです。理由:私が持っていたプロジェクトの既存のユーザーデータベースはMD5を使用していました。これは、2つのメソッドをオーバーライドしたことを意味します(メモリがそれを提供する場合)-ValidateUser()そしてCreateUser()...。

H番目

于 2012-05-26T01:23:26.927 に答える
1

マイクロソフトがソースをリリースした方法を見てみましょう

プロバイダー ソース

また、.Net のブラック ボックスは何もないことを覚えておいてください。Just Decomileまたはリフレクターを使用して、他のユーザー (Microsoft) があなたがやりたいことと同じことをどのように行ったかについて詳しく知ることができます。

于 2012-05-25T22:44:55.390 に答える
1

ユーザーが検証されると、ASP.Net メンバーシップはトークン (大きな暗号化された文字列) を作成します。このトークンは、構成での構成方法に応じて、Cookie または URL 文字列の一部として保存されます。オプションで、Cookie が使用可能かどうかに基づいていずれかを実行できます。トークンは、ユーザーの ID を永続化して、低レベルでの動作に関する主な質問に答えるために使用されます。関連する他のすべて (ロール、プロファイルなど) は、カスタム プロバイダーの実装方法に応じて、サーバーから取得されます。

これがセッションよりも安全であるとは限りません。サイトが SSL 暗号化で保護されていない場合、URL または Cookie リプレイの同じ脆弱性があります (ユーザーが URL を他の人に電子メールで送信する場合、URL ではさらに悪化します)。

于 2012-05-26T00:38:36.997 に答える
0

これは、独自のカスタム MembershipProvider を実装するための優れたチュートリアルです。

http://www.codeproject.com/Articles/165159/Custom-Membership-Providers

そうは言っても、あなたは本当に記事を読む必要があります。記事を読んで手順に従うと、質問に対する答えが理解できるようになります。このようなチュートリアルに従うという骨の折れる作業を行う以外に、それを理解するための優れた方法はありません。少なくとも、それが私の意見です。このチュートリアルを実行して、初めて独自のカスタム メンバーシップ プロバイダーを実装しました。数時間後、独自の暗号化アルゴリズムの実装を開始できました。

于 2012-05-25T22:58:49.413 に答える
0

標準のメンバーシップ プロバイダーを使用することを強くお勧めしますが、リンク テーブルを作成して、既存のユーザー リポジトリを asp ネット メンバーシップ プロバイダーに結合します。両方の長所。

于 2012-05-26T03:48:58.410 に答える