2010-09-04 154 views
3

我有實現身份驗證和授權的通常要求。我曾經使用自定義代碼實現它,我擁有用戶,角色,角色頁面,用戶頁面和用戶角色。因此,我們可以通過這種方式給予某個用戶角色(即組多個頁面)和/或直接定義對某些頁面的訪問權限。所有這些都能夠指定細粒度的權限,例如在這些頁面中添加/編輯/刪除記錄的功能。ASP.Net身份驗證和授權選項

我的問題:使用Forms身份驗證實現此功能有多簡單,並且實現自定義解決方案有什麼優勢。我還擔心在確保會話劫持和反欺騙攻擊者可以重播請求並冒充合法用戶方面是否會有任何優勢。表單身份驗證在那裏有任何優勢,還是隻有SSL可以抵禦這一點(這使得兩種方法在這方面都是平等的)。

回答

2

Forms身份驗證僅僅是從瀏覽器通過一個認證令牌的機制服務器,作爲請求者的身份。我現在正在使用Session變量來記住登錄用戶的信息?這與表單身份驗證類似,因爲會話狀態通過Cookie進行維護(部分)。同樣,表單身份驗證會創建一個防篡改標識令牌並使用cookie存儲它,以便當用戶發出後續請求時,cookie會發送到服務器,該服務器會說「嗨,我是用戶X.」正如名稱所言,表單身份驗證只是一種身份驗證機制,即識別訪問者。

對於授權,您通常會使用URL授權,這是您在Web.config中指定的一種機制,這些是某些用戶(和/或角色)可以訪問(或無法訪問)的頁面。但是,URL授權再次如其名稱所暗示的那樣,只是授權用戶的機制,用於確定給定的請求者是否有權檢索某個資源。

那麼您如何存儲用戶信息,如用戶名,電子郵件,密碼等?這就是會員發揮作用的地方。這是一個用於創建和存儲和管理用戶帳戶的可擴展框架。還有Roles系統,它是一個類似的可擴展模型,用於創建角色並將它們與用戶相關聯。

這些都是您應該探索的工具和框架:表單身份驗證,URL授權,成員資格和角色。它們是互補的技術,並且(通常)是串聯使用的。

爲了解決您的具體問題:

有多容易實現這一點使用窗體身份驗證和這是否給什麼優勢實現自定義解決方案。

表單認證(以及URL認證和成員資格和角色)很容易實現。使用這些技術有三個主要優勢,而不是定製解決方案:

  1. 使用這些技術更有效。你不必重新發明輪子,從而節省你的時間。
  2. 使用這些技術可以減少錯誤代碼。如果您實施自定義解決方案,您可能會遇到安全漏洞或在測試期間無法捕獲的錯誤。自從ASP.NET成立(近十年來)以來,Forms auth和URL授權兩者都已出現,並且已被全球數百萬開發人員使用並「在現場測試」。成員和角色已經有5-6年的歷史,具有相似水平的現場測試。顯然,你不能說你的定製解決方案。
  3. 使用這些技術可使您的應用更易於維護。如果您需要聘請新開發人員來幫助您的網站,她很可能已經熟悉auth等表單,但需要花時間來加快定製解決方案。

我也很關心知道是否會有任何優勢,當談到從會話劫持和反欺騙指攻擊者可以重放請求,並模仿合法用戶保護。表單身份驗證在那裏有任何優勢,還是隻有SSL可以抵禦這一點(這使得兩種方法在這方面都是平等的)。

表單驗證具有非常嚴格的安全性(假定您正在使用默認設置)。身份驗證票證已加密並進行了數字簽名,並具有內置的基於時間的到期日期(以減少重播攻擊的表面積)。我不確定你目前的自定義解決方案使用什麼標識,因爲你沒有提到它,但我會打賭它是會話狀態。這將是「安全」。關鍵是,身份令牌 - 您的案例中的會話cookie以及身份驗證中的身份驗證票據 - 都是安全的,並且可以在沒有SSL的情況下通過Internet安全傳輸。

不管你使用什麼方法,但是,SSL至少要保護登錄頁面是至關重要的。這是用戶輸入他的憑證的頁面。如果該頁面是而不是通過SSL訪問,則用戶的憑證將通過Internet以純文本格式發送。

會[成員,角色等]給我分配用戶訪問直接某些頁面,並在通過角色的同時(即組訪問定義多頁)

URL的能力授權允許您基於用戶/角色鎖定整個頁面。要授予對頁面上特定功能的訪問權限,您必須編寫自己的代碼/邏輯。

要學習這些技術,我會無恥地建議您查看my tutorials on website security。在C#和VB中共有15個分步教程,可以下載完整的,經過測試的工作演示代碼。它們涵蓋了與用戶帳戶相關的各種場景,從表單驗證到URL授權,到基於角色的授權,到創建和管理用戶帳戶。

這裏是再次的網址:http://www.asp.net/security/tutorials

快樂編程!

+0

我已經看過所有這些了,我的問題仍然存在: 1.是否能讓我直接並通過角色(該組訪問定義到多個頁面)直接並指定用戶訪問某些頁面? 2.是否會給我細節控制指定每頁上的添加/編輯/刪除權限? 3.當涉及到安全性時,我是否認爲使用我的定製方法沒有多大優勢,並且最終唯一真正的安全性是SSL? 這裏是一個相關實體: User_Page USER_ID, 網址, can_add, can_edit, can_delete – MSD 2010-09-04 21:11:30

+0

MSD,我更新了我的答案來解決你的問題。 – 2010-09-04 21:36:29

+0

感謝Scott的闡述。 我從資源中看到它的方式,配置哪些人可以訪問存儲在web.config中的內容,存儲在數據庫的映射表中的自定義解決方案中,這在表單身份驗證和成員資格中也可行嗎? 另外,你有沒有實現類似於我需要的某種示例或示例(授權頁面中的添加/編輯/刪除功能)。謝謝 – MSD 2010-09-04 21:44:47