2009-05-21 100 views
16

我目前正在爲我正在開發的一個新項目設計會員資格/配置文件方案,並且希望從其他人那裏獲得一些輸入。ASP.NET Active Directory成員資格提供程序和SQL配置文件提供程序

該項目是一個ASP.NET Web應用程序,由於時間較短,我試圖使用任何和所有內置的.NET框架組件。該網站可能會招待< 5000個用戶。每個用戶都將擁有一個配置文件,其中自定義設置和對象將在訪問之間持續存在。

我需要使用現有的Active Directory進行身份驗證。由於AD模式無法擴展以容納新字段,因此我需要將用戶設置和對象保存在不同的數據存儲中。我也被告知ADAM可能不是一個可能的解決方案。

我曾希望將Active Directory成員資格提供程序用於我的身份驗證方案,並將SQL配置文件提供程序用作用戶配置文件數據存儲。我不想建立一個自定義配置文件提供程序,但是如果需要的話,我不認爲這會帶來很多問題。

我想知道這是否是一個可能的解決方案,如果有的話,有沒有人有這種方法的運氣。

任何意見將不勝感激。

謝謝。

回答

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

謝謝Marc。今天早上我開了一槍,一切都很順利。謝謝你的幫助! – cmcginty 2009-05-22 15:51:56

+0

如果我們使用AD進行成員身份驗證並使用aspnet_profile來存儲配置文件。如何創建和管理關係,即。用戶名。換句話說,asp.net如何根據AD的什麼屬性來生成UserId? – 2011-08-01 05:30:21

3

除了這種由馬克作爲回答:

<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; 
2

感謝您的信息,它的很多幫助。此外,也可以使用MembershipProvider provider = Membership.Provider;設置默認提供程序,而不是使用成員標記進行設置。

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">

我「以前也writen小下載到Visual Studio項目和來源如何,並配置爲使用AspNetActiveDirectoryMembershipProvider。

ASP.NET Forms Based Authentication - using AspNetActiveDirectoryMembershipProvider

2

我使用Visual Studio 2012,並試圖作爲消化,但出現錯誤:

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

所以我發現那幾個變化應做默認的登錄表單上的VS2012與MVC 4和實體框架如下:對文件「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); 
    } 
相關問題