2009-05-21 8 views
16

私は現在作業中の新しいプロジェクトのメンバシップ/プロファイルスキームを設計しています。他のメンバからの入力を希望しています。ASP.NET Active DirectoryメンバシッププロバイダとSQLプロファイルプロバイダ

プロジェクトはASP.NET Webアプリケーションであり、短い時間枠のために、私ができるすべての.NETフレームワークコンポーネントを使用しようとしています。サイトはおそらく< 5000ユーザーを楽しませるでしょう。各ユーザーには、カスタム設定とオブジェクトが訪問間で保持されるプロファイルがあります。

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

私は認証スキームとSQLプロファイルプロバイダとしてActive Directoryメンバーシッププロバイダをユーザープロファイルデータストアとして使用したいと考えていました。私は、カスタムプロファイルプロバイダを構築したくないですが、必要ならば、これは多くの問題を提起しません。

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

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

ありがとうございました。

答えて

15

まずオフ - 私はこれを自分でやったことはありません。

Scott Mitchell(4 Guys from Rolla)のASP.NET 2.0メンバシップ、ロール、プロファイルプロバイダシステムのトピック全体には、本当に優れたシリーズ(14 !!)があります。

私の理解によると、あなたはあなたの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> 

は、私が思うだろう、これは:-)を働くべきマルクによって答えとしてこれに加えて

+0

ありがとうございました。私はこれを今朝打ちました。そしてすべてがうまくいったのです。ご協力いただきありがとうございます! – cmcginty

+0

メンバーシップと認証にADを使用し、プロファイルを格納するためにaspnet_profileを使用する場合。どのように関係が作成され、管理されているのですか。ユーザーID。言い換えれば、asp.netはどのようにADのどの属性に基づいてUserIdを生成するのかを知っていますか? –

+0

http://stackoverflow.com/questions/9588265/understanding-wcf-windows-authenticationにお答えください。 – Lijo

3

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

あなたも

01を追加する必要があるかもしれませんcorresponnding接続文字列と
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; 
2

おかげで、その多くを助けました。また、デフォルトプロバイダーをMembershipProvider provider = Membership.Provider;に設定するのではなく、メンバーシップタグで設定することもできます。私は「AspNetActiveDirectoryMembershipProviderを使用するように設定する方法およびVisual Studioプロジェクトへのダウンロードとソースの小さなを書かもまし。

ASP.NET Forms Based Authentication - using AspNetActiveDirectoryMembershipProvider

2

私は、Visual Studio 2012を使用してみましたい

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">

問題は表示されますが、エラーが表示されます。

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

「公共のActionResultログイン(LoginModelモデル、文字列上のファイルに

「AccountController.cs」

次のようにいくつかの変更がMVC 4とVS2012のデフォルトのログインフォームとエンティティフレームワークに行われるべきであること

if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password)) 
ためにreturnurl)」

変更

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

"公共の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); 
    } 
+0

+1ありがとうございます!これはまさに私にとって問題を解決したものでした。 'AspNetActiveDirectoryMembershipProvider'で問題を検索するとき、私はこの情報に遭遇していません。 –

関連する問題