← Foundations Course

SYSTEM FOUNDATIONS · 12

Authentication / Session / Token:Server 怎麼知道「你是誰」

登入不是「把使用者名稱存進前端」。Authentication 的真正作用,是讓後續 request 能帶著可驗證的身份證明;Server 驗證後建立 trusted user context,再進一步做 authorization。

Learning outcomes

1. Authentication:你是誰?

User submits credential
  ↓
Server/Auth provider verifies
  ↓
Session or token created
  ↓
Future requests carry identity proof

只有 credential 驗證成功,server 才能建立可信 identity。

2. Authorization:你能做什麼?

user = alice

Request:
DELETE /courses/42

Question:
Does alice own course 42?
Does her role allow delete?

知道你是誰,不代表你可以操作所有資源。

3. Session

Browser cookie:
session_id=abc123

Server:
abc123 → user 7

傳統 server-side session 常讓 Browser 只持有 opaque identifier,實際 session state 存在 server-side storage。

4. Token

Authorization:
Bearer eyJ...

Token-based system 常把 signed claims 帶在 request。Server/平台仍必須驗證 signature、expiry、issuer 等,不能只 decode 就相信。

5. Client 自稱身份不可信

{
  "owner_id": "admin"
}

這個 JSON 可以被手工改掉。Server 應從已驗證 authentication context 取得 user identity,而不是相信 body。

Project checkpoint:Request Journey Map v12

Login
  ↓ verify credential
Session/token
  ↓
GET /api/courses
  + identity proof
  ↓
Server verifies user
  ↓
authorize rows/action
  ↓
SQL / response

Debug evidence:登入了卻 401 / 403

401 常指沒有有效 authentication;403 常指已知道 identity 但沒有 permission。先分清是哪一個,再查 cookie/token 是否送出、是否過期、resource policy 是否允許。

Knowledge check

  1. Authentication 和 authorization 差在哪?
  2. 為什麼 client body 的 owner_id 不可信?
  3. Session cookie 和 signed token 最大模型差異?
  4. 畫出 login 到 authorized DB query 的完整流程。