大傢好,我是 Guide哥!端午已過,又要開始工作學習啦!
我發現有很多小夥伴對認證授權方面的知識不是特別瞭解,搞不清 Session 認證、JWT 以及 Cookie 這些概念。
所以,根據我根據日常對這部分學習已經在項目中的實際運用總結瞭這 13 個相關的問題並且附上瞭詳細的回答。希望能夠對大傢有幫助!
認證 (Authentication) 和授權 (Authorization)的區別是什麼?
這是一個絕大多數人都會混淆的問題。首先先從讀音上來認識這兩個名詞,很多人都會把它倆的讀音搞混,所以我建議你先先去查一查這兩個單詞到底該怎麼讀,他們的具體含義是什麼。
說簡單點就是:
- 認證 (Authentication): 你是誰。
- 授權 (Authorization): 你有權限幹什麼。
稍微正式點(囉嗦點)的說法就是 :
- Authentication(認證) 是驗證您的身份的憑據(例如用戶名/用戶 ID 和密碼),通過這個憑據,系統得以知道你就是你,也就是說系統存在你這個用戶。所以,Authentication 被稱為身份/用戶驗證。
- Authorization(授權) 發生在 Authentication(認證) 之後。授權嘛,光看意思大傢應該就明白,它主要掌管我們訪問系統的權限。比如有些特定資源隻能具有特定權限的人才能訪問比如 admin,有些對系統資源操作比如刪除、添加、更新隻能特定人才具有。
認證 :
授權:
這兩個一般在我們的系統中被結合在一起使用,目的就是為瞭保護我們系統的安全性。
RBAC 模型瞭解嗎?
系統權限控制最常采用的訪問控制模型就是 RBAC 模型 。
什麼是 RBAC 呢?
RBAC 即基於角色的權限訪問控制(Role-Based Access Control)。這是一種通過角色關聯權限,角色同時又關聯用戶的授權的方式。
簡單地說:一個用戶可以擁有若幹角色,每一個角色有可以被分配若幹權限這樣,就構造成“用戶-角色-權限” 的授權模型。在這種模型中,用戶與角色、角色與權限之間構成瞭多對多的關系,如下圖
在 RBAC 中,權限與角色相關聯,用戶通過成為適當角色的成員而得到這些角色的權限。這就極大地簡化瞭權限的管理。
通常 RBAC 下的權限設計相關的表有5 張,其中有 2 張用於建立表之間的聯系:
通過這個權限模型,我們可以創建不同的角色並為不同的角色分配不同的權限范圍(菜單)。
通常來說,如果系統對於權限控制要求比較嚴格的話,一般都會選擇使用 RBAC 模型來做權限控制。
什麼是 Cookie ? Cookie 的作用是什麼?
Cookie
和 Session
都是用來跟蹤瀏覽器用戶身份的會話方式,但是兩者的應用場景不太一樣。
維基百科是這樣定義 Cookie
的:
簡單來說: Cookie
存放在客戶端,一般用來保存用戶信息。
下面是 Cookie
的一些應用案例:
- 我們在
Cookie
中保存已經登錄過的用戶信息,下次訪問網站的時候頁面可以自動幫你登錄的一些基本信息給填瞭。除此之外,Cookie
還能保存用戶首選項,主題和其他設置信息。 - 使用
Cookie
保存Session
或者Token
,向後端發送請求的時候帶上Cookie
,這樣後端就能取到Session
或者Token
瞭。這樣就能記錄用戶當前的狀態瞭,因為 HTTP 協議是無狀態的。 Cookie
還可以用來記錄和分析用戶行為。舉個簡單的例子你在網上購物的時候,因為 HTTP 協議是沒有狀態的,如果服務器想要獲取你在某個頁面的停留狀態或者看瞭哪些商品,一種常用的實現方式就是將這些信息存放在Cookie
- ……
如何在項目中使用 Cookie 呢?
我這裡以 Spring Boot 項目為例。
1)設置 Cookie
返回給客戶端
@GetMapping("/change-username")
public String setCookie(HttpServletResponse response) {
// 創建一個 cookie
Cookie cookie = new Cookie("username", "Jovan");
//設置 cookie過期時間
cookie.setMaxAge(7 * 24 * 60 * 60); // expires in 7 days
//添加到 response 中
response.addCookie(cookie);
return "Username is changed!";
}