簡體   English   中英

在 ASP.NET 中放置身份驗證檢查的位置

[英]Where to place authentication check in ASP.NET

我有一些代碼用於確定用戶是否登錄,我想將它放在 ASP.NET 網站的每個頁面上,以便只有登錄用戶才能查看它。 問題是該站點被分成多個項目/解決方案,因此維護單個代碼可能很困難。

我在想我可以創建一個 class 繼承System.Web.UI.Page並覆蓋Page_Init ,但這需要更改所有頁面,以便它們從新的新 class 繼承。而且我認為這不會跨項目工作。

所以我想從不同的方面來解決這個問題:使用 AOP。 我以前從未使用過 Aspects,但看起來我可以使用 PostSharp 編寫一個在每個Page_Init (或者Page_Load ?)之前注入代碼的 Aspect。 這可能是一個快速的解決方案,但如果我需要一個頁面來不執行身份驗證檢查(每個人都可以使用),我可能會遇到問題。

澄清一下,我已經有了一個登錄解決方案; 我只是想檢查每個頁面上的登錄信息。

查看 HttpModules。 asp.net 框架已經編程,因此一個模塊在每個頁面請求上運行,您只需編寫它並將其添加到 web.config。

http://msdn.microsoft.com/en-us/library/zec9k340(v=vs.71).aspx

編輯:這是一個更好的鏈接,演示了如何處理 BeginRequest 事件http://msdn.microsoft.com/en-us/library/ms227673(v=vs.85).aspx

正如@jrummell 提到的, MembershipProvider是一個不錯的選擇,但是如果您要創建自定義登錄解決方案,請查看此鏈接,它有一個非常簡單的登錄實現步驟

由於您似乎已經處理並運行了登錄解決方案,因此創建一個覆蓋 page_init 的 class 聽起來是您的最佳選擇。 這可以通過簡單地在一個單獨的項目中創建 class 來跨其他項目工作,您可以將其包含在其他解決方案中......老實說,這是跨越多個項目的邏輯的最簡單方法。這也將是易於維護,因為您以后只需更新一個位置。

如果您使用的是 MasterPages,則不必訪問所有頁面,只需將其包含在特定的 MasterPage 上,然后將您希望身份驗證的所有頁面設置為使用該 MasterPage。

Windows Identity Foundation 可以為您解決這個問題。 有關 WIF 的詳細信息,請參閱http://msdn.microsoft.com/en-us/security/aa570351 無需重新發明輪子。 如果您只有一個 Web 應用程序,則 Forms 身份驗證就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM