我需要能夠確定我的ASP.net MVC 3應用程序中的用戶是否是授權(未經過身份驗證)。檢查用戶是否被授權
我有一個使用Windows身份驗證來驗證用戶的Intranet應用程序。在「allowedUsers」組中的用戶才允許訪問該網站,這是強制執行與AuthorizeAttribute
像這樣:
[Authorize(Roles="allowedUsers")]
public abstract class BaseController : Controller
可正常工作和任何用戶不是在組沒有提供對站點的訪問。到現在爲止還挺好。
但是,我現在有一個問題,在用戶進行身份驗證但未經授權的情況下。請允許我解釋:
在我的BaseController
中,我重寫了Initialize
方法。在這裏,我設置了我的域服務,它具有它從控制器所需的任何依賴項,其中之一是User.Identity
對象。
Service.Initialize(User.Identity);
在我的服務中,我使用Identity.Name
從我的數據庫中查找用戶詳細信息。我的服務的設計假設是,如果用戶已經到了這裏,他們必須是授權用戶,所以如果沒有記錄匹配,我假設他們是一個新的(但授權的)用戶,並使用提供的Identity.Name
準備新的用戶記錄讓他們稍後輸入其他細節。
問題出現在用戶通過身份驗證但未獲得授權的情況下;在這種情況下,用戶被拒絕訪問該頁面,但控制器仍然在幕後實例化並且服務被初始化。該服務永遠不會在數據庫中找到匹配項(因爲用戶不應該有權訪問)並創建新的用戶記錄。這給我留下了一些不應該訪問的用戶記錄(只填寫Identity.Name
)。
我的第一個(天真的)嘗試解決這個問題的方法是檢查我的服務中的Identity.IsAuthenticated
屬性,但是,經過大量研究,我已經瞭解了身份驗證和授權之間的區別,並瞭解爲什麼這樣做不夠充分,因爲用戶可能被認證但未被授權。
所以我基本上尋找的是類似於User.IsAuthenticated
但是對於授權E.G. User.IsAuthorised
。我的想法是,我會檢查我的控制器,如果用戶沒有授權,我不會初始化服務。
有沒有什麼方法可以確定?