為什么AuthorizeAttribute會重定向到登錄頁面以進行身份驗證和授權(quán)失???在ASP.NET MVC中,您可以使用如下標記控制器方法AuthorizeAttribute:[Authorize(Roles = "CanDeleteTags")]public void Delete(string tagName){
// ...}這意味著,如果當(dāng)前登錄的用戶不在“CanDeleteTags”角色中,則永遠不會調(diào)用控制器方法。不幸的是,對于失敗,AuthorizeAttribute返回HttpUnauthorizedResult,它總是返回HTTP狀態(tài)代碼401.這導(dǎo)致重定向到登錄頁面。如果用戶未登錄,則這非常有意義。但是,如果用戶已登錄但未處于所需角色,則將其發(fā)送回登錄頁面會很困惑。似乎AuthorizeAttribute將身份驗證和授權(quán)混為一談。這似乎是ASP.NET MVC的一個疏忽,或者我錯過了什么?我不得不做一個DemandRoleAttribute將兩者分開的東西。當(dāng)用戶未經(jīng)過身份驗證時,它會返回HTTP 401,并將其發(fā)送到登錄頁面。當(dāng)用戶登錄但未處于所需角色時,它會創(chuàng)建一個NotAuthorizedResult。目前,這會重定向到錯誤頁面。當(dāng)然我不必這樣做?
3 回答

當(dāng)年話下
TA貢獻1890條經(jīng)驗 獲得超9個贊
將其添加到您的Login Page_Load功能:
// User was redirected here because of authorization section if (User.Identity != null && User.Identity.IsAuthenticated) Response.Redirect("Unauthorized.aspx");
當(dāng)用戶重定向到那里但已經(jīng)登錄時,它會顯示未授權(quán)的頁面。如果他們沒有登錄,則會顯示登錄頁面。

侃侃無極
TA貢獻2051條經(jīng)驗 獲得超10個贊
不幸的是,您正在處理ASP.NET表單身份驗證的默認行為。這里討論了一種解決方法(我還沒試過):
http://www.codeproject.com/KB/aspnet/Custon401Page.aspx
(它不是特定于MVC)
我認為在大多數(shù)情況下,最好的解決方案是在用戶嘗試到達之前限制對未經(jīng)授權(quán)資源的訪問。刪除/刪除可能將其帶到此未授權(quán)頁面的鏈接或按鈕。
在屬性上有一個額外的參數(shù)來指定重定向未授權(quán)用戶的位置可能會很好。但與此同時,我將AuthorizeAttribute視為一個安全網(wǎng)。
- 3 回答
- 0 關(guān)注
- 837 瀏覽
添加回答
舉報
0/150
提交
取消