Authentication 與 Authorization 差異解析:搞懂 401 和 403 錯誤

Published December 10, 2025 by 徐培鈞
基礎概念

這兩個英文長得很像,但意思完全不同!

  • Authentication(驗證)
  • Authorization(授權)

很多新手會搞混,連 HTTP 狀態碼 401 和 403 也常常搞不清楚什麼時候該用哪個。這篇一次講清楚。

Authentication(驗證)

核心問題:你是誰?

就是確認「你是不是你說的那個人」。

生活中的例子

  • 刷學生證進校門 → 確認你是這間學校的學生
  • 輸入帳號密碼登入 → 確認你是這個帳號的主人
  • 刷臉解鎖手機 → 確認你是手機的主人

結果

只有兩種:通過不通過

Authorization(授權)

核心問題:你能做什麼?

通過身份驗證之後,再決定「你有多少權限」。

生活中的例子

  • 你刷學生證進了校門,但你不能進教師辦公室(因為你不是老師)
  • 你登入了 Netflix,但你只能看基本方案的內容(因為你沒買進階方案)
  • 你登入了公司系統,但你不能看財務報表(因為你不是財務部門)

結果

等級制的:你可以做到哪些事、不能做哪些事。

兩者的關係

通常是先 Authentication,再 Authorization

  1. 先確認你是誰(Authentication)
  2. 再決定你能幹嘛(Authorization)

實際例子:刪除文章

有人想刪除網站上的一篇文章

第一關 – Authentication:這個人登入了嗎?

  • 沒登入 → 請先登入
  • 有登入 → 進入第二關

第二關 – Authorization:這個人有權限刪除嗎?

  • 是文章作者 → 可以刪
  • 是管理員 → 可以刪
  • 都不是 → 不好意思,你沒這個權限

HTTP 狀態碼:401 vs 403

講完觀念,來看實際開發中會遇到的 HTTP 狀態碼。

400 開頭的是「客戶端錯誤」,其中有兩個跟驗證 / 授權有關:

名稱Unauthorized
意思驗證失敗(你是誰?我不認識你)
名稱Forbidden
意思授權失敗(我知道你是誰,但你沒權限)

401 Unauthorized:驗證沒過

什麼時候回傳 401?

當使用者沒有提供正確的身份證明時。

例如:

  • 沒有登入,卻想存取需要登入的頁面
  • 帶了 Token,但 Token 過期或是錯的
  • 帳號密碼打錯

用學校的例子來說:你沒帶學生證,門口警衛不讓你進去。

使用者:我要進去!
伺服器:你的學生證呢?
使用者:我沒帶 / 我帶的是假的
伺服器:回傳 401 Unauthorized

403 Forbidden:授權沒過

什麼時候回傳 403?

當使用者有登入、身份也對,但權限不夠時。

例如:

  • 一般會員想進管理員後台
  • 想存取別人的私人資料
  • 想執行超出自己權限的操作

用學校的例子來說:你有學生證,也刷卡進校門了,但你想進教師辦公室,門禁系統不讓你進。

使用者:我要進教師辦公室!
伺服器:我知道你是學生,但這裡只有老師能進
使用者:可是我有學生證...
伺服器:回傳 403 Forbidden

401 vs 403 快速判斷

回傳401
回傳401
回傳401
回傳403
回傳403
回傳403

一句話記法

  • 401:你誰啊?我不認識你(身份有問題)
  • 403:我知道你是誰,但你不能做這件事(權限不夠)

總結

Authentication你是誰?
Authorization你能幹嘛?
Authentication對 or 錯
Authorization等級高低
Authentication401 Unauthorized
Authorization403 Forbidden
Authentication驗證身份
Authorization驗證權限

記住這個順序:

下次看到 401 或 403,就知道是哪一關沒過了!