2011-12-19 46 views
3

我基本上做的是this。但是,無論何時我使用內置的AuthorizeAttribute,MVC框架(我猜)都不會查看我的主體以確定用戶是否具有適當的角色。它一直試圖在app_data目錄中創建一個新的MDF文件,並且因爲它沒有特權而被炸燬。自定義表單身份驗證+ MVC3 + AuthorizeAttribute

這是預期的行爲,我是否應該派生自己的AuthorizeAttribute並自己檢查主體?

另一個奇怪的行爲指出,我有兩個網站在同一個域上,我正在做單點登錄。在任一站點上,我使用相同的類庫在AuthenticateRequest上重新創建自定義主體,並且在調試主體在每個站點上正確設置時看到。但是,站點1(對用戶進行身份驗證的站點)使用內置的AuthorizeAttribute,它完美地工作,但站點2正在嘗試在調用具有AuthorizeAttribute的任何操作時創建MDF文件。

+0

好的,我想我找到了更多的信息。我的自定義主體對象正在Global.asax文件內的PostAuthenticateRequest方法中更改爲RolePrincipal。如果我將自定義主體集邏輯移動到PostAuthenticateRequest方法中。一切正常,但我不必爲其他網站做這件事,我無法找到他們的web.config文件之間的區別。所以我真正想要做的是找出將我的主體更改爲RolePrincipal對象並將其禁用。 – 2011-12-19 23:13:35

回答

12

好吧,我想通了,我不得不將這添加到我的web配置下system.webServer。這將刪除替換我的主體的HttpModule。

<modules runAllManagedModulesForAllRequests="true"> 
    <remove name="RoleManager" /> 
</modules> 
+0

由於用於識別違規模塊。請考慮不使用模塊屬性'runAllManagedModulesForAllRequests =「true」'。其他人說[不要使用它](http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html),因爲模塊甚至可以運行諸如jpg圖像請求之類的東西。這可能是浪費資源。只是刪除RoleManager爲我工作。 – 2015-09-16 09:44:13

+0

就像一個魅力 – 2015-10-26 09:24:55

2

默認情況下,新的MVC3應用程序使用SqlMembershipProvider作爲默認授權機制,並嘗試將詳細信息存儲在SQL Express數據庫(MDF文件)中。

所以儘量清除,在web.config中:

<membership> 
    <providers> 
     <clear /> 
    </providers> 
</membership> 

只要你實現所有正確的安全對象(IPrincipalIIdentity),並在Application_AuthenticateRequest decryping窗體身份驗證票,內置在[Authorize(Roles="RoleName")]應該爲你工作。

在你發佈的鏈接中,這是我們正在做的事情,它的效果非常好。

+0

謝謝你的回答。我已經嘗試了你的建議(幾次之前,然後再次安全),並且我仍然得到一個RolePrincipal而不是我在Application_AuthenticateRequest中設置的自定義主體。有任何想法嗎? – 2011-12-19 23:17:22

+0

我甚至嘗試: ' \t \t \t \t ' – 2011-12-19 23:22:03