2012-08-13 149 views
1

我有一個asp.net webforms項目。在需要保護的所有領域的應用程序中添加業務邏輯認證檢查的標準方式是什麼?Asp.net身份驗證檢查

例如,Page X只能被標有'Admin'的人看到。

一個更復雜的例子:只有屬於一組管理用戶A,B和C的人的用戶可以修改用戶A,B或C的配置文件信息。

我可以繼續談論數百個需要身份驗證檢查的地方和類型,但基本上我知道這樣做的唯一方法是在每個按鈕單擊處理程序page_load的開始處運行大量自定義代碼,GridView rowChange等,它將首先檢查一些業務邏輯,然後允許它或返回。

更普遍的是,是否有必要對這些業務邏輯進行身份驗證檢查,以便基本上每次回發?

回答

1

如果檢查是基於角色和矮胖的,例如, 「Admin」角色可以執行此頁面上的所有代碼,但是沒有其他人可以 - 然後使用緩存在FormsAuthentication cookie中的角色和一個PrinciplePermission屬性,例如http://msdn.microsoft.com/en-us/library/ms731200.aspx您也可以將這些屬性放在方法上。但是,它們不允許進行復雜的授權檢查,並且在不重新編譯代碼的情況下不容易更改。

如果檢查僅是部分基於角色和粒度的,例如,祕書可以點擊這個,管理員可以查看這個,週末可以看到這個,等等。然後你需要在你的代碼中進行授權檢查。您必須重新執行授權檢查,除非您可以將結果緩存在安全的地方。如果ViewState已加密,則可以將結果緩存在ViewState中。

如果您沒有檢查回發授權,那麼您很容易受到自定義製作的帖子的調用,這些帖子會在禁用的按鈕,不可見的按鈕等上調用事件。通過加密viewstate並保持事件驗證開啓,您可以減輕某些事情太。

將代碼分解爲實用程序類和基類,以最大限度地減少重複。