ドメインモデルにASP.NETメンバーシッププロバイダーを実装する方法
-
03-07-2019 - |
質問
Webサイトでは、メンバーシップと認証を統合する必要があります。ですから、ASP.NETメンバーシップの機能を使用したいのですが、他のカスタムのものがあります。しなければなりません。
だから私はここに鉛筆と紙を持って座って、ドメインモデルに線を引きます...そして、ASP.Netメンバーシップを最大限に活用するにはどうすればいいですか?
MembershipUserを継承するクラスを作成し、独自のプロパティとメソッドで拡張する(および別のテーブルに保存する)必要があります。または、MembershipUserをカスタムユーザー/クライアントオブジェクトのプロパティにする必要がありますか?
これを行うための良い方法は何ですか?
解決
私はそれについて考えました、そして、ふさわしいと思われる2つの方法があります(もちろん、それを機能させるためのより多くの方法があります)。
カスタムメンバーシッププロバイダー
メンバーシッププロバイダーを変更して独自のものを使用し、ユーザーオブジェクトを使用してすべての情報を保存します。
これに関する問題は、Asp.Netによって既に適切に処理されているものの多くの再実装を伴うことです。良いことは、すべての詳細を含む単一のUserオブジェクトがあることです。
メンバーシップユーザーからユーザーへのリンク
この方法では、元のメンバーシッププロバイダーを使用してユーザー名とパスワードを処理しますが、たとえばサービスを使用して、独自のUserオブジェクトをユーザー名のようなものとリンクします。
設定は本当に簡単です。次のように使用するサービスを作成するだけです。
string userName = "Jon Skeet";
User user = new UserManagementServices().GetUserByUserName(userName);
他のヒント
私は自分のメンバーシッププロバイダーを作成することになり、それを3つの個別のソリューションに実装しました。これは非常にシンプルで、ユーザーをmembershipUserにリンクするよりもはるかにエレガントです(私も試しました)。
これを読む...:
ASP.NET Webサイトセキュリティ用のカスタムメンバーシッププロバイダーを作成
さらに詳しく知りたい場合は、このビデオ(ソースコード付き)。
MembershipUserを拡張し、独自のバージョンのSqlMembershipProviderを作成して、現在の運用環境で既存のドメインにマップし、正常に機能するようにしました。
MembershipUserは、基本的にはUserテーブルのビューです。拡張MembershipUserクラスには、少し脆弱なデフォルトのSqlProfileProviderシステムを使用する代わりに、プロファイル/アカウントスタイルのプロパティが含まれています。
既存のメンバーシップテーブルまたはsprocを使用できませんでしたが、自分で作成しました。たとえば、SqlMembershipProviderはGUIDを不透明なキーとして使用しますが、運用システムは従来のintを使用します。日付もすべてUTCなどです。
追加のユーザー機能はすべて、メンバーシップメソッドではなく、ユーザードメインを介してアクセスされます。
HTH。
現在、 Microsoft ASP.NET 2.0 Membership APIを使用していますCoDe MagazineのExtended の記事では、既存のクラスのラッパーを作成してメンバーシップAPIを拡張する方法を説明しています。主な利点は、すぐに使用できる機能をすべて保持でき、カスタムプロバイダーを実装する場合のように独自の機能を書き換える必要がないことです。ソースコードが提供されています。