2017-08-04 132 views
2

在「舊」ASP.NET中,我可以構建自定義授權屬性並覆蓋HandleUnauthorizedRequest。我似乎無法使用自定義授權處理程序在ASP.NET Core中執行此操作。後者要麼「成功」,要麼「失敗」,我想根據失敗的性質重定向到替代控制器操作。Asp.net核心授權重定向到發生故障的指定路徑

以下是這種情況。我的網絡應用程序的用戶有一個聲明,表明他們是「活躍」用戶,即他們已經完全註冊並且已驗證他們的詳細信息等。新用戶已經使用OpenIdConnect中間件進行了身份驗證,但是,直到我們完全驗證並設置註冊他們的賬戶,沒有「積極」的用戶主張。因此,新用戶和活動用戶都已被認證。我想阻止新用戶訪問大部分應用程序。每次他們嘗試訪問https://app.example.com/dashboard我想將它們重定向到一個https://app.example.com/newuser頁面,從中可以完成設置過程。

我可以在我的控制器上使用授權策略來檢查是否存在「活動」用戶聲明並允許訪問。當新用戶沒有此聲明並且未通過授權時,我希望授權處理程序擁有一些邏輯,然後將它們重定向到他們有權訪問的應用程序區域。但我不明白如何使用ASPNET核心中的授權框架來完成此操作。

有一個有點笨拙的解決方案它使用CookieMiddleware並實現對OnRedirectToAccessDenied事件的處理程序 - 見https://github.com/aspnet/Mvc/issues/4890。我也想過如何實現一個運行在每個請求上的動作過濾器。

我只是在這裏愚蠢嗎?當然,對授權失敗進行某些操作是有意義的,這種操作不僅僅是讓用戶重新進行身份驗證。

回答

3

一些挖約和參照精彩的書後,臨ASP.NET MVC核心(第6版,亞當·弗里曼),簡單的回答我的問題是創建一個授權過濾器。這通過單個方法OnAuthorization(AuthorizationFilterContext context)實現IAuthorizationFilter。在這種方法中,做任何你需要做的事來檢查請求。如果授權失敗,只需將context.Result屬性設置爲一些IActionResult,在我的情況下爲RedirectToActionResult。如果請求通過授權,則什麼也不做。

你也可以在過濾器中使用依賴注入 - 太好了。

關於如何在Microsoft ASP.NET文檔站點上實現或編寫IAuthorizationFilter的示例沒有提及。感謝Adam Freeman。

相關問題