2012-05-22 106 views
2

我試圖將一些MVC3功能混合到現有的WebForms應用程序中。我遵循了一些指南,並且除了授權部分外,還設置了一切工作。現有的應用程序有<deny users="*" />,位於根web.config,每個子文件夾都有自己的web.config,允許訪問特定角色的頁面。混合ASP.NET WebForms和MVC授權

我的新理解是,這種風格不能/不應該在控制器上使用,我應該使用Authorize屬性代替。我已使用[Authorize(Roles="AdminRole")]對我的測試「HomeController」進行了裝飾,但當我嘗試查看頁面時,出現「拒絕訪問」頁面。

如果我將根web.config更改爲<allow users="*" />,則該頁面有效。這是否意味着我添加到控制器的屬性正在工作,但是根web.config設置優先於它?我不想混淆我們現有的授權內容,因爲該網站已經建立,我只是想添加MVC來玩。我錯過了什麼嗎?感謝您提供的任何見解。

+0

顯然這是一個壞主意 - http://blogs.msdn.com/b/rickandy/archive/2010/08/24/securing-your-mvc-application.aspx –

回答

1

這是有點棘手,因爲您正嘗試在已使用Web窗體的應用程序中使用MVC安全性。如果這是純粹的mvc,選擇很簡單。如果您無法將mvc功能拉出到單獨的應用程序中,那麼這會讓您陷入一片泡菜。

我的第一個建議是嘗試提取代碼。如果您正在使用MVC來提供寧靜的功能,那麼也可以查看MVC4 web api,爲您的應用程序提供api並共享在它們之間使用的組件,這些組件需要將它們從您的Web應用程序中拖出到Domain庫或其他適當命名的圖書館。這樣說,並非100%確定allow users =「*」是否按預期工作,但我相信是這樣。它很容易測試,只需將Roles =「AdminRole」更改爲Roles =「placeholder」,然後再試一次。

設置這個雖然殺死了你的認證的其餘部分,所以一個想法可能是把所有的mvc路由放在一個特定的url下,比如「/ api /」,並允許web.config中的*到那個路徑,然後使用mvc所有控制器方法的安全性。這對您的主要網絡應用程序影響較小。

+0

嗯......當我切換到' Roles =「placeholder」',我沒有得到一個「訪問被拒絕」頁面,我只是得到一個401代碼的空響應(這是有道理的)。我認爲你的建議可行,但沒有像我希望的那樣很好地整合。如果還有其他方法可以解決這個問題,請在打開標記解決之前留出一點空缺。 – Ocelot20

+0

亞當 - 是否有任何新的指導呢?我正在使用MVC5與WebForms運行到相同的確切情況 - http://stackoverflow.com/questions/27785561/configuring-authorization-in-a-mixed-mvc-webforms-web-app – SB2055

+0

@ SB2055我的指導將是要升級到身份,請按照以下方式查看網絡表單:http://www.asp.net/web-forms/overview/getting-started/getting-started-with-aspnet-45-web-forms/membership-and-administration並且mvc繼續使用屬性。雖然我沒有試圖混合他們個人,我不明白爲什麼它不會工作。它使用相同的系統。我在這裏涵蓋了身份:http://www.microsoftvirtualacademy.com/training-courses/customizing-asp-net-authentication-with-identity –