認證(Authentication) 和 授權(Authorization)在 Asp.Net core 充當了兩個不同的職責。有的老夥計在理解的時候還存在誤解。本文我們將會通過一些簡單的例子來說明這兩個概念。
加入 A 使用者現在通過瀏覽器想要存取時總的網站,這個時候我們需要知道他是誰,也就是認證。如果他是一個普通使用者,那麼他只能存取一些公開的頁面,如果他是管理員,那麼他可以存取一些管理員的頁面。這個時候我們需要知道他能做什麼,也就是授權。
因此,認證是指識別使用者的身份,而授權是指決定使用者能做什麼。
特別說明,識別你是誰的意思是,你可能被識別為一個普通使用者,也可能被識別為一個管理員,也可能被識別為一個遊客(匿名使用者)。
我們常見的 OAuth2.0 認證、OpenID Connect 認證,賬號密碼認證,二維條碼認證等等,這些認證其實是使用者與系統互動而產生憑據的過程。這些憑據可以是一個 token,也可以是一個 cookie,也可以是一個 session。這些憑據都是用來識別使用者身份的。
為了區別這種情況,我們將前者在本文中稱為「登入方式」,後者稱為「認證方式」。
而在 Asp.Net Core 中,認證是指請求中的憑據如何被轉換為一個 Principal 或者 Identity 物件。所以我們會見到 Claims-based authentication,也就是基於宣告的認證。
所以實際上整個過程,可以理解為:使用者通過登入方式登入,如果登入成功,那麼系統會產生一個憑據,這個憑據拒絕與採用的認證方式有關,而是與 Asp.Net Core 中的認證方式有關。
舉一些例子:
那麼結合以上情況,我們來鑑別一些詞語的意思:
在 Asp.Net Core 中,認證是識別使用者身份的過程,授權是決定使用者是否有許可權存取資源的過程。
感謝您的閱讀,如果您覺得本文有用,請點贊、關注和轉發;更多精彩內容請關注我的部落格 https://www.newbe.pro 和 https://github.com/newbe36524/newbe36524。