17

私は現在、自分が取り組んでいる新しいプロジェクトのメンバーシップ/プロファイルスキームを設計しており、他の人から何らかの意見を得るのを望んでいました。

このプロジェクトはASP.NETWebアプリケーションであり、時間枠が短いため、可能な限りすべての組み込みの.NETFrameworkコンポーネントを使用しようとしています。このサイトはおそらく5000人未満のユーザーを楽しませるでしょう。各ユーザーには、訪問間でカスタム設定とオブジェクトが保持されるプロファイルがあります。

認証には既存のActiveDirectoryを使用する必要があります。ADスキーマを拡張して新しいフィールドを保持することはできないため、ユーザー設定とオブジェクトを別のデータストアに保持する必要があります。また、ADAMはおそらく可能な解決策ではないと言われています。

認証スキームにActiveDirectoryメンバーシッププロバイダーを使用し、ユーザープロファイルデータストアとしてSQLプロファイルプロバイダーを使用したいと考えていました。カスタムプロファイルプロバイダーを構築したくないのですが、必要に応じてこれが大きな問題になることはないと思います。

私はこれが可能な解決策でさえあるかどうか疑問に思いました、そしてもしそうなら、誰かがこのアプローチで運が良かったです。

コメントをいただければ幸いです。

ありがとう。

4

4 に答える 4

16

まず最初に-私はこれを自分でやったことがありません。

Rollaの4GuysのScottMitchellによる、ASP.NET 2.0メンバーシップ、役割、およびプロファイルプロバイダーシステムのトピック全体に関する非常に優れたシリーズ(14 !!パート)があります。

私の理解によると、基本的にweb.configの次の2つのセクションを使用して、探しているこの動作を構成できるはずです。

  <!-- 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>

私はこれがうまくいくはずだと思います:-)

于 2009-05-21T21:15:21.377 に答える
3

マークが答えたこれに加えて:

<add name="AspNetActiveDirectoryMembershipProvider"
           type="System.Web.Security.ActiveDirectoryMembershipProvider, 
                 System.Web, Version=2.0.3600, Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a" />

追加する必要があるかもしれません

connectionStringName="ADService",
attributeMapUsername="sAMAccountName"

対応する接続​​文字列付き

<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; 
于 2011-03-25T17:41:09.017 に答える
2

情報をありがとう、それは大いに役立ちました。また、デフォルトのプロバイダーを設定するのではなく MembershipProvider provider = Membership.Provider; 、メンバーシップタグで設定することもできます。

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">

また、AspNetActiveDirectoryMembershipProviderを使用するように構成されたVisualStudioプロジェクトとソースへの簡単な方法とダウンロードについても説明しました。

ASP.NETフォームベースの認証-AspNetActiveDirectoryMembershipProviderを使用

于 2011-04-25T15:18:33.200 に答える
2

Visual Studio 2012を使用していて、推測どおりに実行しようとしましたが、エラーが表示されます。

To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".

そこで、MVC4とエンティティフレームワークを備えたVS2012のデフォルトのログインフォームに次のようにいくつかの変更を加える必要があることを発見しました。

ファイル「AccountController.cs」

「publicActionResultLogin(LoginModel model、string returnUrl)」について

変更

    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))

にとって

    if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))

「publicActionResultLogOff()」について

変更

    WebSecurity.Logout();

にとって

    FormsAuthentication.SignOut();

そして、以下を追加します。FormsAuthentication.SetAuthCookie(model.UserName、false);

    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);
    }
于 2013-06-17T11:36:07.573 に答える