簡単な回答については、各引用の下の要約を参照してください。詳細については、段落を参照してください。信頼できる情報源については、末尾の「参考文献」セクションも参照してください。
要約
1.SimpleMembership/SimpleMembershipProvider (WebMatrix.WebData) とは何ですか? また、その責任は何ですか?
SimpleMembership ( と の両方を含む用語SimpleMembershipProvider
)SimpleRoleProvider
は、誰もが使用できる安全なパスワード ストレージを備えた 80% のプラグ アンド プレイ認証および承認フレームワークを実装するクリーンで迅速な方法を提供する責任があります。
2.WebSecurity(WebMatrix.WebData)とは?
WebSecurity
Membership
は、およびと一緒に機能する一般的なメンバーシップ タスクのヘルパー クラスですOAuthWebSecurity
。ロールは、引き続き を通じて個別にアクセスされますRoles
。
3.Membership (System.Web.Security) クラスとは何ですか?
Membership
ユーザー設定と操作を管理する元の ASP.NET メンバーシップ実装の静的クラスです。多くのユーザー操作は、 で繰り返すのではなく、ここで実行されますWebSecurity
。どちらも、選択した同じプロバイダーを使用します。
4.MVC4 が UserProfile テーブルと webpages_Membership テーブルを作成するのはなぜですか? それらは何のためにあり、違いは何ですか?MVC4 が作成する UserProfile クラスとは何ですか?
2 つのテーブルは、異なる機能を実行します。webpages_Membership
スキーマはフレームワークによって制御され、資格情報に使用されます。スキーマUserProfile
は私たちによって制御され、ユーザーに対して保存するプロパティに使用されます。
5.UsersContext クラスとは何ですか?
これは、MVC インターネット アプリケーション テンプレートによって開始として提供される( DbContext APIDbContext
の一部) です。その唯一の役割は、(たとえば を介して) クラスを操作できるようにクラスを含めることです。UserProfile
InitializeSimpleMembershipAttribute
6.これらすべてがどのように連携してユーザー認証を行うのですか?
これは、上記の要約と以下の詳細から明らかなはずです。用途:WebSecurity
一般的なタスク。(Visual Studio の「MVC インターネット アプリケーション」テンプレート内)UserProfile
を介してアクセスされる、ユーザーに対して保存するカスタム プロパティ。メソッドを持っていない場合。そして役割のために。VS テンプレートのコントローラーを使用して、使用例を確認します。UsersContext
Membership
WebSecurity
OAuthWebSecurity
Roles
編集します。もし誰かがここまで来たら
既存のデータベースがあるとします...
既存のデータベースがあり、カスタム メンバーシップ プロバイダーを作成する唯一の理由が従来のパスワード ストレージ メソッドに対処することである場合は、回避策を使用できます。これは、古いパスワード ストレージから SimpleMembership アルゴリズム (Rfc2898DeriveBytes
クラスを使用する) に移行できる場合にのみ機能します。詳細については、脚注を参照してください。
離れられない場合は、特定のパスワード アルゴリズムを使用するために独自のプロバイダーを作成する必要がありますSimpleMembershipProvider
。
注:パスワードSimpleMembershipProvider
はENCRYPT ではなくハッシュされます。違いとそれが重要な理由がわからない場合は、カスタム セキュリティを使用して独自のプロバイダーを作成する前によく考えてください。
詳細
1.SimpleMembership/SimpleMembershipProviderとは
すべてがどのように組み合わされているかを理解するには、歴史を理解することが役立ちます。
- ASP.NET は 2005 年に ASP.NET メンバーシップ システムを導入しました。
- このシステムはプロバイダーを使用して、アカウントやロールなどの管理に使用される共通のインターフェイスから実装の詳細を抽象化しました。
- また、基本的な「ユーザー プロファイル」機能も提供されました (単一列の xml フィールドに保存されるため、人々は避けがちでした)。
- SimpleMembership は、ASP.NET メンバーシップ システムにプラグインするプロバイダーとして 2010 年に世界にリリースされましたが、OAuth 認証、および列ごとのプロパティ ユーザー プロファイル ストレージ (オリジナルで使用されていた単一列ストレージの代わりに) も可能にします。実装)。
SimpleMembershipProvider
元のプロバイダの実装ExtendedMembershipProvider
を拡張する実装
これは、codeplex のオープン ソースです ( github にミラーリングされています)。したがって、セキュリティに関する限り、コードを自分で評価し、複製し、変更することができます。オープンソース セキュリティの利点と欠点について独自の見解を持ち、 NIHのピンチでそれを調理する必要があります。(個人的な見解: 時々使用しますが、それ以外は使用しません)
ExtendedMembershipProvider
GeneratePasswordResetToken
それ自体は、古いメンバーシップ プロバイダー API のようなコマンドを追加します。
2.WebSecurity(WebMatrix.WebData)とは?
WebSecurity
簡単なアクセスを提供しSimpleMembershipProvider
、一般的なタスクを 1 か所で簡単にアクセスできるようにするための単なるファサードまたはヘルパー クラスです。これは、元のフレームワークの拡張により、ExtendedMembershipProvider
元のクラスの一部がMembership
現在では十分ではないことを意味するためです。例:
これらのメソッドは一般に、使用しているプロバイダに従います。SimpleMembership に依存するだけでなく、プロバイダのようなオブジェクトを結び付けて、Membership
メンバーシップ関数を実行するための共通点を提供します。
OAuth 認証OAuthWebSecurity
に相当するものもあることに注意してください。WebSecurity
3.Membership (System.Web.Security) クラスとは何ですか?
Membership
元の実装からのものです。ユーザー設定を管理し、現在拡張されている基本的なMembershipProvider
実装を使用してユーザー関連の操作を実行します。ExtendedMembershipProvider
これは静的クラスであるため、名前空間を宣言する場所ならどこでも使用できるため、たとえば現在のユーザーを簡単に取得できます。Membership.GetUser
WebSecurity
あることを行って他のことを行わなかったり、あることを行って他のことを行わなかったりするという事実によって引き起こされる混乱がありMembership
ます。WebSecurity
より高いレベルの操作のためのツールキット、およびMembership
ユーザーに対して何かを行うためのツールキットと見なす場合は、問題ありません。それらはプロバイダー上で連携します。
4.MVC4 が UserProfile テーブルと webpages_Membership テーブルを作成するのはなぜですか? それらは何のためにあり、違いは何ですか?MVC4 が作成する UserProfile クラスとは何ですか?
webpages_Membership
は、固定スキーマを持つテーブルであり、プロバイダーは基本的なアカウント操作を実行でき、主に資格情報を保存できます。
UserProfile
は、ユーザー アカウントに対する情報を格納するためにカスタマイズするテーブルであり、UserProfile
クラスを通じて厳密に型指定された形式で利用できるようにします。
webpages_OAuthMembership
と同じジョブを実行する と呼ばれる追加のテーブルがありますが、webpages_Membership
統合する OAuth ログイン プロバイダ用です。
このセットアップの魔法は、1 人のユーザーが自分のサイトでメンバーシップ ログインを持ち、Google、Facebook などのさまざまなプロバイダーで任意の数の OAuth ログインを持つことができ、それらはすべて、に保存されている共通のプロファイルを共有することです。UserProfile
通常、テーブルが で始まる場合、webpages_
アクセスするための API があることを意味します。テーブルは、(デフォルトの MVC インターネット アプリケーション テンプレートを使用する場合)のクラスUserProfile
によって表されます。したがって、に含まれる任意のクラスで使用する通常のメソッドを介してこれにアクセスします。UserProfile
UsersContext
DbContext
UserProfile
はコード ファーストに非常に適しています。列 (ユーザーのEmail
アドレスなど) を追加してから、移行を設定して、次のリリースでその列をデータベースに含めることができます (移行を使用したい場合)。実際、UserProfile
テーブルはそのように呼ばれる必要はありません -WebSecurity.InitializeDatabaseConnection
呼び出し、[Table("UserProfile")] public class UserProfile
および独自の移行を使用して変更できます。
5.UsersContext クラスとは何ですか?
これは、Visual Studio の新しいプロジェクトで提供されている MVC インターネット アプリケーション テンプレートからのものです。最初に、自分のデータベース コンテキストと共通の接続文字列を共有していることを確認します (メンバーシップ テーブルが同じデータベースにあると仮定します)。必要に応じて、これを変更して後で分離することができます。
独自のコンテキストとは別のものにする必要はありません。これは、メンバーシップ情報を現在または将来別のデータベースに保存する場合にのみ必要です。それを取り除く場合は、参照をUsersContext
独自のコンテキストに変更するだけです。 、調整中Database.SetInitializer
。
参考文献:
Using SimpleMembership With ASP.NET WebPages - Matthew Osborn
- これは、SimpleMembership とその内容、理由、機能に関する元のリファレンスです。
MSDN - メンバーシップの紹介
- メンバーシップは依然として SimpleMembership の中核であるため、それについて少し理解するのに役立ちます。
編集脚注: ローリング パスワード アップグレードの詳細
- アカウントのパスワード バージョンを格納するプロパティを追加します
UserProfile
(例: レガシーの場合は 1、SimpleMembership の場合は 2)。
- 「ログイン」アクションで、次のようにコードを記述します。
- それらがSimpleMembershipパスワードバージョンにある場合は、通常のログインを行います
- レガシー パスワード バージョンを使用している場合は、次のことを行います。
- 古い方法で確認してください
- それが正しい場合は、SimpleMembership バージョンを使用するために
ResetPassword
それChangePassword
を使用してリセットすると、フィールドが新しいパスワード バージョンに更新されます。
- 最後に、パスワードのバージョンを更新します
UserProfile
- 同様の方法でパスワードを使用する他の AccountsController メソッドを更新します。
- 新しいカスタム プロバイダーを作成する必要がないため、ハックな回避策と、
webpages_Membership
触れてはならないテーブルへの結合を使用してください。
このすべてを でトランザクション対応にすることができTransactionScope
ます。起こっている唯一の厄介なことは、コントローラーの余分なコードと への結合webpages_Membership
です。