Auth 筆記
Contents
HTTP 是一種Stateless
的協定
這個我以前面試有被考過這一題,印象非常的深刻!所以在這裡便紀錄下來做一個重新再提醒。HTTP其實是一種Stateless
的協定,也就是無狀態的協定。這意味著:每一次的HTTP Call
都可以被視為一種獨立事件、彼此互不關聯。
然而,我們平時怎麼處理用戶的認證、如何登入登出的呢?
認證
接續前面說HTTP
的Stateless
,事實上,瀏覽器是一種軟體與應用程式,在HTTP
當中有header
可以增加一些簡易的資訊,而瀏覽器會存一些資訊在裡面,像是cookie
或session storage
等等。
面試時常常有一題要你比較一下cookie
,localstorage
,sessionstorage
:
這裡我簡述一下下
cookie
: 存在瀏覽器的一種方式,空間比較小,會被使用者容易竄改localstorage
: 存在瀏覽器的一種方式,空間比較大,不容易因為瀏覽器關閉而消失sessionstorage
: 也是存在瀏覽器的一種方式,何謂session?就是瀏覽器關閉之後它就消失了……但同樣空間比cookie大多
基礎登入登出
基礎的登入登出奠基於cookie
上,假設你沒有帶這個cookie
就沒辦法辨認你是誰。而cookie
是使用者端在控制的,很容易可以偽造,而他也不適合放機密資料,於是放在server
端的session
就產生了,但接著前面說的stateless
,事實上瀏覽器那邊也會存一個session_id
在那裡,於是瀏覽器在呼叫時便能拿這個session_id
來和session
做對應取得用戶資料、狀態
而session如果碰上load balancer, 就會需要考慮是否要另外存放在redis之類的等等複雜issue。
JWT
是一種 token 機制的 auth 系統。主要分成有三個部分:header, payload 和 Signature。你可以透過網路上將token做驗證。 可以看看這部分的參考資訊
OAuth
一種授權與帳號分開的auth系統,通常與第三方有關係(例如Google登入、Facebook登入),他會挑出一個畫面問你要用什麼平台登入、並且授權平台可以提供給你的資料(例如email,姓名等等)。關於Oauth 可以看參考資料,我還不算是這部分的專家:參考資料
另外還有一篇文章也直得紀錄:https://blog.kenwsc.com/posts/2023/jwt-vs-session/
小君曰: auth 真的博大精深