0

看來我沒有很好地表達我的問題,所以我將此添加爲補充標題:如何擴展FormsAuthentication類,以便我可以覆蓋配置文件中的默認行爲(例如,將執行控制傳遞給MembershipProvider用於在新的頁面請求上更新MembershipUser的LastActivity),如果失敗了,用我自己的自定義類替換FormsAuthentication類的機制,並將其作爲FormsAuthentication類通常使用?ASP.NET FormsAuthentication沮喪:如何連接自定義MembershipProvider?

我們如何實現一個不太可笑的剛性,更具擴展性的FormsAuthentication框架,這將允許我們集成到一個自定義的MembershipProvider中?有沒有在這方面的工作?最終,我想把我的web.config這樣的東西:

<authentication mode="Forms"> 
    <forms membershipProvider="MyCustomMembershipProvider"> 
     <events> 
      <add event="AuthenticatedRequest" action="OnAuthRequest" /> 
      <add event="UnAuthenticatedRequest" action="OnRequest" /> 
      <add event="UnAuthorizedRequest" action="UnAuthRequest" /> 
     </events> 
    </forms> 
</authentication> 

這應該不佔用我所有的時間。表單身份驗證在ASP.NET頁面生命週期中似乎相當低級,但必須有一種方法來清除它。

這不是關於自定義會員供應商。我想在我的成員資格提供者類中實現一些東西,如隱含的「IsOnline」和「LastActivity」功能,但FormsAuthentication設置了Cookie並且不回頭。我想在檢查cookie時注入我自己的代碼,但我不能。除了將我自己的cookie放置在頂層之外,必須有其他方法。

+0

可能重複http://stackoverflow.com/questions/5701673/custom-membershipprovider -in-net-4-0) – jrummell

+0

專注於自定義會員供應商。我的沮喪與FormsAuthentication。我會爲我的問題添加更多信息。 –

+0

這是不是很清楚你想要什麼。你在標題和消息中談論定製會員供應商,然後說那不是你在說的。你需要明確你想要的東西。 –

回答

1

不,它不會那樣工作。成員資格提供程序不會獲得身份驗證請求或未經身份驗證的請求。實際上,它與認證很少有關。這由安全框架處理。會員資格僅用作驗證某些用戶名和密碼的手段。而已。您可以將Membership作爲安全框架用來驗證用戶的數據存儲區,但它不執行身份驗證本身的管理。

這篇文章可能是你在找什麼:

http://www.asp.net/security/tutorials/forms-authentication-configuration-and-advanced-topics-cs

[在.NET 4.0中自定義的MembershipProvider(的
+0

我知道它不能像這樣工作;這是我的挫敗感的一部分。儘管如此,我們應該能夠使其工作。 'FormsAuthentication.Authenticate()'和'MembershipProvider.ValidateUser()'最終在精神上相關,而不是現實。我的問題是,這兩種機制在驗證時經常碰到對方,然後甚至不相互承認。這些是固有的安全結構;他們應該能夠溝通。 –

+0

@JeremyHolovacs - 對於這個設計有多糟糕而言,這毫無意義。它的設計方式就是這樣,除了不使用它之外,你可以做的並不多。只要接受這一點,並繼續使用它,或者做其他事情。 –

+0

你是認真的嗎?本網站的重點在於尋找更好的方式,探索新的可能性,並解決方案帶來的挫折。你的哲學仍然會讓我們在某個山洞裏的岩石上撞擊。如果你不知道答案,那沒關係,但不要試圖關閉它,因爲它之前沒有被認真考慮過。有解決方案;必須有。 –

1

根據您的更新,您可以創建一個自定義成員資格提供程序,如linked question中所述,它繼承自SqlMembershipProvider,覆蓋您要更改的任何功能。

你是對的,Forms Authentication只是創建一個cookie;這就是它所要做的 - 幫助您的應用程序確定您的用戶是否已登錄。Membership部分是告訴您IsOnline和LastActivity以及其他用戶信息。

如果您可以讓我們知道您希望覆蓋的會員功能,我們可以嘗試提供幫助,因爲您還沒有給我們足夠的細節。

+0

我不想重寫會員功能。我想覆蓋FormsAuthentication系統,所以當我的ASP.NET頁面從客戶端請求驗證cookie時,我可以調用我的成員資格提供程序中的方法來更新提供程序數據存儲區中的最後一個活動。 –

+0

您想在沒有成員資格的情況下在功能上成爲會員。你讀過會員資格了嗎?它是做你正在嘗試做的嘗試和真正的方法。 – jrummell

+1

@JeremyHolovacs - 默認的.NET提供程序已經在用戶驗證時更新最後一個活動字段(甚至有一個標誌告訴它是否更新該字段)。我不明白爲什麼這不適合你。 –