プロバイダーに関する私の知識は、メンバーシップ/プロファイル/ロールの作成に限定されていることを前もって認めますが、一般的なものは引き続き適用されるはずです。
開発者に別のプロバイダーを指定する機会を与えない限り、はい、デフォルトのプロバイダーが使用されることになります。
したがって、認証を例にとると、web.config に次のものが含まれているとします。
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<remove name="AspNetSqlProvider" />
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SqlServices"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
passwordFormat="Hashed"
applicationName="/" />
<add name="AdProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider" />
</providers>
</membership>
ページのどこかに Login コントロールを追加すると、SqlProvider が使用されます。
次の 2 つの方法のいずれかで別のプロバイダーを使用できます。
- Login コントロールのMembershipProviderプロパティを使用して、別のプロバイダーを指定できます。
- ログイン コントロールのAuthenticateイベントで呼び出されるメソッドを提供できます。このイベントでは、プロバイダーを選択できます。
方法 2 の例は次のとおりです。
private void OnAuthenticate(object sender, AuthenticateEventArgs e){
bool authenticated = false;
MembershipProvider sqlProvider = Membership.Providers["SqlProvider"];
authenticated = sqlProvider.ValidateUser(Login1.UserName, Login1.Password);
if (!authenticated){
// User not found in database, try Active Directory:
MembershipProvider adProvider = Membership.Providers["AdProvider"];
authenticated = adProvider.ValidateUser(Login1.UserName, Login1.Password);
}
e.Authenticated = authenticated;
}
独自のコントロールでこれを行う他の方法は、Provider プロパティを公開し、値があるかどうかを確認し、defaultProvider の代わりにそのプロバイダーを使用することです。
一般に、プロバイダー モデルは、既知のクラスに既定の一連の動作を提供するために使用されてきました。そのため、すべてのメンバーシップ プロバイダーには、(たとえば) MembershipUserを返すメソッドGetUserがあります。AspNetSqlMembershipProvider の GetUser の実装の全体的な目的は、ロードすることです。 ASP.NET SQL データベースからの MembershipUser データ - これは、サンプル メンバーシップ プロバイダーで動作を確認できます。
それが役立つことを願っています!