SYSTEM FOUNDATIONS · 12
Authentication / Session / Token:Server 怎麼知道「你是誰」
登入不是「把使用者名稱存進前端」。Authentication 的真正作用,是讓後續 request 能帶著可驗證的身份證明;Server 驗證後建立 trusted user context,再進一步做 authorization。
Learning outcomes
- 能區分 authentication 與 authorization。
- 能描述 login → session/token → authenticated request。
- 能解釋 client 自稱 user_id 為什麼不可信。
- 能區分 cookie/session 與 token 的概念層次。
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 / responseDebug evidence:登入了卻 401 / 403
401 常指沒有有效 authentication;403 常指已知道 identity 但沒有 permission。先分清是哪一個,再查 cookie/token 是否送出、是否過期、resource policy 是否允許。
Knowledge check
- Authentication 和 authorization 差在哪?
- 為什麼 client body 的 owner_id 不可信?
- Session cookie 和 signed token 最大模型差異?
- 畫出 login 到 authorized DB query 的完整流程。