ASP.NET Active DirectoryのメンバシッププロバイダおよびSQLプロファイルプロバイダ
-
23-08-2019 - |
質問
私は現在、私が働いている新しいプロジェクトのメンバーシップ/プロファイルスキームを設計していますし、私は他の人からいくつかの入力を取得するために期待していました。
プロジェクトは、ASP.NETのWebアプリケーションであり、原因短い時間枠に、私は私ができる。NET Frameworkコンポーネントに建て任意およびすべてを使用しようとしています。このサイトは、おそらく<5000人のユーザーを楽しませるでしょう。各ユーザーは、カスタム設定とオブジェクトは訪問の間持続されるプロファイルを持つことになります。
私は、認証のために既存のActive Directoryを使用するために必要なのです。 ADスキーマは、新しいフィールドを保持するように拡張することができないので、私は別のデータストアにユーザー設定とオブジェクトを保持するために必要なのです。私はまた、ADAMは、おそらく可能な解決策ではないと言われている。
私は自分の認証方式とユーザー・プロファイル・データストアとしてSQLプロファイルプロバイダのためのActive Directoryのメンバシッププロバイダを使用することを期待していました。私は、カスタムプロファイルプロバイダを構築しないことを好むだろうが、必要であれば、私はこの問題のポーズをあまり見ません。
これも可能な解決策である場合は、私は思っていた、そうであれば、誰もがこのアプローチを持つ任意の運を持っています。
任意のコメントを大幅に高く評価されるだろう。
感謝します。
解決
まず最初に - 私はこれを自分でやったことがない。
。ASP.NET 2.0メンバーシップ、役割とスコット・ミッチェルプロファイルプロバイダシステムの全体的な話題に本当に優れたシリーズ(14 !!部)<のhref = "http://www.4guysfromrolla.com/articlesであります/120705-1.aspx」REL = "nofollowをnoreferrer"> 4つのみんなロラからの
私の理解によると、あなたはあなたのweb.configファイルで基本的にこれら二つのセクションを使用して探している、この動作を設定することができる必要があります:
<!-- configure Active Directory membership provider -->
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
<providers>
<add name="AspNetActiveDirectoryMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web, Version=2.0.3600, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
<!-- configure SQL-based profile provider -->
<profile defaultProvider="SqlProvider">
<providers>
<add name="SqlProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="SqlProfileProviderConnection"
applicationName="YourApplication" />
</providers>
<!-- specify any additional properties to store in the profile -->
<properties>
<add name="ZipCode" />
<add name="CityAndState" />
</properties>
</profile>
私はこれが機能するはずと思うだろう: - )
他のヒント
MARC BY答えとしてこれに加えます:
<add name="AspNetActiveDirectoryMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web, Version=2.0.3600, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
あなたにも追加する必要があるかもしれません。
connectionStringName="ADService",
attributeMapUsername="sAMAccountName"
corresponnding接続文字列と
<connectionStrings>
<add name="ADService" connectionString="LDAP://ServerIP" />
</connectionStrings>
あなたは.NET 4.0を使用している場合、あなたは交換する必要があります。
Version=2.0.3600
タグ付き
Version=4.0.0.0
最後に、
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
<providers>
<add name="AspNetActiveDirectoryMembershipProvider"
connectionStringName="ADService"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
attributeMapUsername="sAMAccountName"/>
</providers>
</membership>
と、それがデフォルトとして設定されているので、それは次のように参照することができます:
MembershipProvider provider = Membership.Provider;
おかげで情報のために、そのたくさん助けました。また、むしろMembershipProvider provider = Membership.Provider;
で、デフォルトのプロバイダを設定するよりも、あなたは、メンバーシップタグ内でそれを設定することができます。
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
私は "また、小さなを書かれましAspNetActiveDirectoryMembershipProviderを使用するように設定する方法およびVisual Studioプロジェクトとソースをダウンロードします。
ASP.NETフォームベース認証 - AspNetActiveDirectoryMembershipProviderを使用して>
私は、Visual Studio 2012を使用していますし、推薦して実行しようとしましたが、エラーが表示されます:
To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".
だから私は、次のようにいくつかの変更がMVC 4とVS2012とエンティティフレームワークのデフォルトのログインフォームに行われるべきであることを発見します:
ファイル "AccountController.cs" の
"公共のActionResultログイン(LoginModelモデルは、文字列にreturnurl)" の
タグを変更します
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
のための
if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))
の "公共のActionResultログオフ()"
タグを変更します
WebSecurity.Logout();
のための
FormsAuthentication.SignOut();
、以下を追加します。FormsAuthentication.SetAuthCookie(偽model.UserName);
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, false);
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}