昨天我們實作了 Basic Authentication,體驗到「每次請求都要帶帳號密碼」的麻煩。
因此,Web 系統後來發展出 Session 機制:
接下來就讓我們來開始介紹Cookie跟Session吧!
這樣一來,使用者就不用重複輸入帳號密碼,伺服器也能辨認「這個人已經登入過了」。
整體來說,整個Cookie Based Authentication的流程如下:
SESSION_ID
SESSION_ID
存在 CookieSESSION_ID
→ 知道這個人是誰範例:
Client: POST http://localhoat:8080/login
{ "username": "ithome", "password": "secret" }
Server: 驗證成功 → 建立 Session
Response: Set-Cookie: JSESSIONID=abc123
Client: GET http://localhoat:8080//hello
Cookie: JSESSIONID=abc123
Server: 查 Session → 驗證通過 → 回應資料
那這個與Basic相比,有什麼差別呢,我們可以從攜帶的資訊,儲存的位置來看這兩者個差異,可以看這個表:
機制 | 帶的資訊 | 儲存位置 | 優缺點 |
---|---|---|---|
Basic Auth | username:password (Base64 編碼) |
客戶端 | 簡單、無狀態,但超不安全 |
Cookie + Session | Session ID |
Session 在伺服器端,Cookie 在瀏覽器 | 安全性比 Basic Auth 高,但有狀態,需要伺服器管理 Session |
雖然 Session 機制比 Basic Auth 好很多,但仍然有幾個需要注意的風險:
這裏的CSRF網路上有很多人解釋,詳細的技術我會推薦大家自己用關鍵字查找,會能夠更加理解關於CSRF,跟如何確保安全性的方法。
相信看到這裡,你肯定已經有了明確的概念,但會想要知道要怎麼樣實作,於是明天,我們會用 Spring Boot Security 來實際做一次 Cookie Based Authentication。
你將會看到:
JSESSIONID
。今天我們就到這裡,讓我高歌離席,期待明天與各位再相見!