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

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

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