iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
自我挑戰組

用 30 天和 ASP.NET Core 打造一個活動報名管理系統系列 第 24

ASP.NET Core - 活動報名管理系統:Day24 將身分驗證加到 Controller 與 Action

  • 分享至 

  • xImage
  •  

前言

昨天我們簡單使用過帳號註冊、登入、登出等功能,今天將讓系統功能瀏覽時,必須要登入後才能夠瀏覽,也就是後端的流程跑到 Action 前,必須要有身分驗證擋著,身分驗證通過,才可執行 Action 內容。

Middleware 新增身分驗證層

UseAuthentication & UseAuthorization

Day12 Life Cycle 生命週期 的內容有提到 Middleware,如果要簡單了解一下 Middleware,可以看一下 Day12 這篇~

而在系統導入身分驗證會使用到 UseAuthorization()UseAuthentication() 這兩個 Middleware,先來說說 UseAuthorization()

UseAuthentication()

UseAuthentication() 提供系統去判斷使用者是否有權限去執行限定的資源,e.g. 未登入時,是否有權限瀏覽 Events 的 Index 頁面;登入後,是否有權限瀏覽活動建立的頁面。

簡單來說,UseAuthentication() 主要功能為「驗證使用者」以及「如果該使用者未通過驗證,該做甚麼例外處理。」

而通過 UseAuthentication() 後,會再呼叫指定的擴充方法來將使用者資訊、驗證資訊等進行額外處理,e.g. JWT、Cookies 等擴充方法。

若系統是導入 ASP.NET Core Identity 驗證框架,則 UseAuthentication() 是不用手動加入 Startup.cs,ASP.NET Core Identity 預設會將此 Middleware 放在自己的框架後端執行。

UseAuthorization()

UseAuthorization() 則是提供指定使用者在經過驗證後,能夠執行哪些功能,簡單說就是權限。

e.g. 系統管理員經過驗證(UseAuthentication())後,UseAuthorization() 藉由 Filter 來判斷系統管理員需被套用最高權限規則,並可使用所有系統功能。

UseAuthorization() 前必須先經過 UseAuthentication() 的處理。

Controller & Action 加入驗證功能

要讓頁面必須是登入後才能瀏覽的作法很簡單,只要加上 [Authorize] 這一個 Attribute 加到 Controller 或是指定的 Action 即可。

Controller 範例

若是活動頁面皆須登入後才可瀏覽,則可在 EventsController 最前方的 Code 加入 [Authorize]

    [Authorize]
    public class EventsController : Controller


點擊「活動建立」時,頁面導向至登入畫面,而不是 Events 的 Index,且可以看到 URL 最後帶著 ReturnUrl 的參數,於是登入後會導向至 Events 的 Index。

Action 範例

若今天僅在活動建立(Create)才需登入時,則在 Action 前方加入 [Authorize]

        [Authorize]
        public IActionResult Create()

現在 Index 可以不登入就瀏覽了:

但點擊 Create 的超連結時,就會跳轉到 Login:

如果想要 Index 以外的頁面才需登入瀏覽呢

這時可以將 [Authorize] 放在 Controller 最前方,並在 Index 前加入 [AllowAnonymous]

        [AllowAnonymous]
        public IActionResult Index()

如此就可以只讓 Index 不須登入即可瀏覽。

本日結語

今天也了解了身分驗證大概的運作流程,接下來到鐵人賽結束都可以好好專注在身分權限以及活動報名的功能邏輯上。

不知不覺鐵人賽剩一周就要結束了,必須堅持到最後啊!

Reference

ASP.NET Core驗證概觀
ASP.NET Core授權簡介
使用受授權保護的使用者資料建立 ASP.NET Core Web 應用程式
ASP.NET Core 中介軟體
[Day22] 身份驗證與授權 - 我與 ASP.NET Core 3 的 30天


上一篇
ASP.NET Core - 活動報名管理系統:Day23 ASP.NET Core Identity & RazorPage
下一篇
ASP.NET Core - 活動報名管理系統:Day25 活動舉辦與活動報名的流程規劃與 Table
系列文
用 30 天和 ASP.NET Core 打造一個活動報名管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言