2010-08-12 54 views
3

的情況是這樣的:有了ASP.Net會員資格,多個會員提供商可以用於登錄到同一個網站嗎?

我們當前配置爲使用不同的applicationNames共享同一個ASP會員數據庫數(19)的網站,如:

<membership defaultProvider="Site1Membership"> 
    <providers> 
    <add 
     applicationName="/site1" 
     name="Site1Membership" /> 
    <add 
     applicationName="/site2" 
     name="Site2Membership" /> 
    </providers> 
</membership> 

我的問題是,如果有多個web.config中定義的提供者可以通過默認提供者之外的其他用戶登錄嗎?

在給定的配置中,顯然存儲在具有applicationName爲「/ site1」的默認提供程序中的用戶將能夠登錄,但我們希望存儲庫中具有「/ site2」的applicationName的用戶也能夠登錄。

我們試圖用作序都提供者的名稱和applicationName的用戶名登錄時,如:

站點2:用戶名或site2Membership:用戶名

它們似乎也沒有工作。

最終目標是,儘管我們希望19個站點具有單獨的用戶和安全性(即站點1的用戶無法登錄到站點2),但我們希望有一個第20個站點,所有站點的用戶都可以登錄和協作,而無需第二個用戶名/密碼。

回答

4

然而你可以做一些自定義代碼。簡而言之,您需要一種確定給定登錄所屬用戶組的方式:應用程序特定用戶或「全局」用戶。我通過要求全局用戶在「G」或「MyCompany」之前加上前綴來處理這個問題,而普通用戶不需要這樣做。

認證方面其實很簡單。在登錄按鈕的Click事件或LoginControl的OnAuthenticate方法中,只需檢測用戶並將其與正確的成員資格提供程序名稱進行匹配即可。

MembershipProvider provider; 
if (username.Text.StartsWith("G\") then 
    provider = Membership.Providers["GlobalProvider"]; 
else 
    provider = Membership.Providers["StandardProvider"]; 

if (provider.ValidateUser(... 

其中變得複雜的是角色。 SqlRoleProvider不是用來處理使用同一個用戶存儲的多個應用程序。您必須更改SqlRoleProvider使用的過程,以便它將遵守MembershipProvider的應用程序,而不是僅使用RoleProvider的應用程序的默認屬性。另外,您需要確保全球用戶在登錄時自動添加到某個角色中。

+0

我們希望避免代碼或編寫自定義提供程序,但看起來就是這樣的答案。 :( – Ragoczy 2010-08-26 14:32:15