Skip to main content

2 posts tagged with "auth"

View All Tags

Auth 筆記

· 3 min read

這個我以前面試有被考過這一題,印象非常的深刻!所以在這裡便紀錄下來做一個重新再提醒。HTTP其實是一種Stateless的協定,也就是無狀態的協定。這意味著:每一次的HTTP Call都可以被視為一種獨立事件、彼此互不關聯。

然而,我們平時怎麼處理用戶的認證、如何登入登出的呢?

認證

接續前面說HTTPStateless,事實上,瀏覽器是一種軟體與應用程式,在HTTP當中有header可以增加一些簡易的資訊,而瀏覽器會存一些資訊在裡面,像是cookiesession storage等等。

面試時常常有一題要你比較一下cookielocalstorage,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/

success

auth 真的博大精深

Passport , Breeze, Fortify , Sanctum 不負責任比較

· 2 min read

我覺得 Laravel 的 Authentication 其實變了很多。

從一開始可以使用php artisan make:auth 做一個簡單的auth起手架以後,往後變成要下載package,到現在可以根據不同的情境使用不同的package。

真不知道該說這是變得麻煩還是越來越進步?(我私心覺得,是進步!)

  1. Breeze

如果懷念以前的make:auth的時光可以使用這個package,附帶前端UI, 使用 Tailwind CSS 作為樣式配置

教學文件可以參考:https://laravel.com/docs/9.x/starter-kits

  1. Sanctum

我最近開了一個新的laravel專案,最近就有附帶這個package,他有點像是firebase那一種,總之如果你要簡單實作token based 的系統可以使用這個package,但他最大的缺點就是沒有支援oauth,如果要使用oauth請左轉去用Passport,否則他其實和passport很像的。

詳細教學可以參考:https://laravel.com/docs/9.x/sanctum#main-content

  1. Passport

他比Sanctum早出生很多,或許在implement token based 以前專案都會使用這個套件,我自己目前還沒玩過(聽說未來我新公司會用,蠻期待的)。 和sanctum 最大的差別似乎就是他有額外支持oauth的部分,如果你有oauth的需求請直接使用這個套件拉

詳細教學可以參考:https://laravel.com/docs/9.x/passport

  1. Fortify

這個套件有點神秘,他一個與其他auth相關套件最大的差別就是他沒有前端實現 所以我個人認為應該是比較適合已經存在的專案之類的,或者你只是想要 純後端實現的認證系統

相關教學可以參考:https://laravel.com/docs/9.x/fortify#main-content

小君曰:我個人自己有在玩Breeze&Sanctum,不得不說,Sanctum真的很不錯,我喜歡。