Laravel 11 的 Sanctum 有哪些模式可以應用?

更新於 發佈於 閱讀時間約 6 分鐘

「登入之後,誰負責證明『我就是我』?又是誰負責記錄『我做了什麼』?」

當我們談認證(authentication)時,真正想要的其實是——可稽核的信任鏈

我們從實務角度出發,帶你拆解 Laravel 11 裡 Sanctum 的兩種主流用法:SPA (Session/Cookie) 模式API Token 模式。除了流程、優缺點,我也把「實作後怎麼做到 accountability」的經驗放進來,讓你的系統不只「能用」,還能在出事時留下清楚的稽核線索。


SPA 模式(Session / Cookie-Based Authentication)

流程速寫

  1. 前端先打 GET /sanctum/csrf-cookie
    • Laravel 會同時種下兩顆 cookie:
      laravel_session(HttpOnly,之後用來綁定使用者)與 XSRF-TOKEN(供 JS 讀取、寫入 X-XSRF-TOKEN header)
  2. POST /login——送帳密 + X-XSRF-TOKEN
    • 認證成功後,laravel_session 與使用者 ID 綁定完成。
  3. 所有後續 API
    • axios/fetch 必須 withCredentials: true,瀏覽器才願意帶 cookie。
    • Laravel 透過 auth:sanctum middleware 自動驗證。

優點

raw-image

層級更高的「責任追蹤」

  • Session ID = 行為指紋
    sessions table 開 agentip_addresslast_activity 欄位,任何可疑行為都能順著 Session 追到裝置、IP、時間。
  • 單裝置登出
    如果安全政策要求「一支手機失竊要立即失效」,可以在登入後記錄 session()->getId(),並在「登出其他裝置」功能裡呼叫 Auth::logoutOtherDevices() 來清空同帳號其他 Session。

雷區

  1. SANCTUM_STATEFUL_DOMAINS 漏填就 401
    • 記得把本機 (localhost,127.0.0.1) 和所有正式網域(含 www / 非 www)通通列進去。
  2. CORS 不能用 搭配 cookie
    • 瀏覽器規範:帶憑證的請求若 Access-Control-Allow-Origin: * 會被擋下。必須明寫來源網域。
  3. 每個 axios/fetch 都要 withCredentials: true
    • 忘一次就少一次 cookie,Debug 會懷疑人生。

API Token 模式(Personal Access Token)

流程速寫

  • 登入成功後產生 token
$token = $user->createToken('api')->plainTextToken;
  • 前端儲存 plainTextToken(localStorage / IndexedDB / Secure Storage)
  • 每次 API: Authorization: Bearer <token>
  • 後端: Sanctum 中介層依據資料庫 personal_access_tokens 驗證

優點

raw-image

與「責任追蹤」的連結

  • Token=可吊銷的身份證
    建議在使用者後台做「查看 / 撤銷 token」列表,若發現異常流量,可立即 revoke。
  • 加強到期策略
    tokens->where('created_at', '<', now()->subDays(30))->delete(); 週期性失效降低遺失風險。
  • 集中式日誌
    Request::user()?->idrequest()->bearerToken() 寫進 ELK 或 CloudWatch,可快速從 token 反查行為。

雷區

  1. XSS 風險
    • Token 一旦被 JS 竊取就完全失守。前端必須 CSP + Escape + SRI 多層防護。
  2. 沒有 Laravel 內建 CSRF 機制
    • 「Bearer token」本質上可抵禦 CSRF,但如果有同源表單仍要注意 double-submit 或 Referer header 驗證。

多模式共存,怎麼分工?

raw-image

Accountability Checklist — 提交前的最後自我檢查

  1. 每條受保護路由都上 auth:sanctum
  2. Session / Token 對應表有留存(方便出事時反查)
  3. 登入 / 登出 / 重要 API 寫入審計日誌(誰、何時、從哪裡)
  4. 定期清理過期 token 或僵屍 Session
  5. 備好「緊急撤銷」腳本:失竊帳號可一鍵停權所有 token / Session
  6. 將安全設定版本化config/cors.phpsanctum.php 皆進 Git,PR 時才能被同儕審閱

選擇認證方案,其實就是在選擇一條「信任鏈」的管理方式。

  • 若你要最低 XSS 風險、單一前端掌控,Session/Cookie 是穩健首選。
  • 若你要跨平台、Stateless 彈性,API Token 讓擴充性最大。
  • 若你要完整 OAuth2 與第三方授權,Passport 會是專業解法。

確認責任歸屬、留下可追溯的軌跡,再進行技術實現——這才是讓使用者真正感到安心的關鍵。

留言
avatar-img
留言分享你的想法!
avatar-img
詹姆士的軟體易開罐
27會員
88內容數
這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
2025/04/05
if寫得好,可以大大提高效率與可讀性。 Guard condition在函式起始先排除不合規輸入,能簡化結構、減少錯誤,使核心邏輯更聚焦並提高可維護性,也方便擴充與測試,在團隊協作和需求變動時,都能更快速應對。建議根據實際情況彈性運用,兼顧可讀性與維護成本。
Thumbnail
2025/04/05
if寫得好,可以大大提高效率與可讀性。 Guard condition在函式起始先排除不合規輸入,能簡化結構、減少錯誤,使核心邏輯更聚焦並提高可維護性,也方便擴充與測試,在團隊協作和需求變動時,都能更快速應對。建議根據實際情況彈性運用,兼顧可讀性與維護成本。
Thumbnail
2025/01/24
還記得我剛開始負責專案時,幾乎沒有人在意測試,改了程式碼就直接上線,結果小錯不斷、大災難頻傳。那種不知道哪裡會冒出 bug 的焦慮感,讓人每天都忙到焦頭爛額,卻依舊無從掌握系統品質。走過這段混亂的過程後,我才真正體會「為什麼需要測試」,也更明白「測試文化」並非只是技術細節。
Thumbnail
2025/01/24
還記得我剛開始負責專案時,幾乎沒有人在意測試,改了程式碼就直接上線,結果小錯不斷、大災難頻傳。那種不知道哪裡會冒出 bug 的焦慮感,讓人每天都忙到焦頭爛額,卻依舊無從掌握系統品質。走過這段混亂的過程後,我才真正體會「為什麼需要測試」,也更明白「測試文化」並非只是技術細節。
Thumbnail
2025/01/24
我想探討,從「個人測試」到「團隊測試策略」的思維轉換,強調測試不僅是個人的責任,更需要整個團隊的支持與參與。文章還提供了推動測試文化的具體建議,包括設定最小測試門檻、融入開發流程,以及如何克服常見的困境如進度壓力或技術債問題。
Thumbnail
2025/01/24
我想探討,從「個人測試」到「團隊測試策略」的思維轉換,強調測試不僅是個人的責任,更需要整個團隊的支持與參與。文章還提供了推動測試文化的具體建議,包括設定最小測試門檻、融入開發流程,以及如何克服常見的困境如進度壓力或技術債問題。
Thumbnail
看更多
你可能也想看
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
報名表單:https://forms.gle/AkfYF7DxFSAYA96k9 嗨,我是紳愿: 參加過我帶領團體的朋友,常知道我有一份心意是, 想讓大家玩得開心,且得以說出自己想說的話。 團體用「真名」來隱喻,是因為真名是一種個人珍貴且悉心呵護的真實, 欲使真名顯現,有一個管
Thumbnail
報名表單:https://forms.gle/AkfYF7DxFSAYA96k9 嗨,我是紳愿: 參加過我帶領團體的朋友,常知道我有一份心意是, 想讓大家玩得開心,且得以說出自己想說的話。 團體用「真名」來隱喻,是因為真名是一種個人珍貴且悉心呵護的真實, 欲使真名顯現,有一個管
Thumbnail
🔐 發現招募其實是一個解鎖的過程,過往的成功經驗,即便相同職缺,也會因用人單位不同,無法完全複製貼上。
Thumbnail
🔐 發現招募其實是一個解鎖的過程,過往的成功經驗,即便相同職缺,也會因用人單位不同,無法完全複製貼上。
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
走在自我心靈成長一途,常會說信任一切安排,一切都是最好的安排...。
Thumbnail
走在自我心靈成長一途,常會說信任一切安排,一切都是最好的安排...。
Thumbnail
EP11精華重點:   1.盤點利害關係人,畫出同心圓圖,中心是公司,往外層層是股東、員工、客戶、供應商、銀行、輔導單位等。 2.穩固既有利害關係人關係,考慮每個決策對他們的影響,做好溝通補償。 3.擴展人脈關係鏈,參加活動、講座、使用名片管理軟體、建立資料庫。 4.維繫人脈,發送電子報、
Thumbnail
EP11精華重點:   1.盤點利害關係人,畫出同心圓圖,中心是公司,往外層層是股東、員工、客戶、供應商、銀行、輔導單位等。 2.穩固既有利害關係人關係,考慮每個決策對他們的影響,做好溝通補償。 3.擴展人脈關係鏈,參加活動、講座、使用名片管理軟體、建立資料庫。 4.維繫人脈,發送電子報、
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News