0

我需要能夠確定我的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。我的想法是,我會檢查我的控制器,如果用戶沒有授權,我不會初始化服務。

有沒有什麼方法可以確定?

回答

0

我決定考慮這個問題,而不是在身份驗證或授權方面,但在MVC管道方面。

我的問題來自於我初始化ControllerInitialize方法中的服務,即使用戶未被授權,該方法似乎也會被調用。這讓我很清楚,在任何操作方法被調用之前,我的服務的初始化需要在控制器的生命週期中儘可能晚地發生。

我移動服務初始化邏輯進入OnActionExecuting方法之前到基實現(使得我的服務被初始化之前被執行的操作方法)。 如果用戶同時授權和認證,MVC流水線只會調用此方法,並給予我所需的行爲。

相關問題