在 API 安全性討論中,您經常會聽到關於 "AuthN" 和 "AuthZ" 的術語。雖然它們聽起來很相似且經常一起使用,但它們解決的是兩個完全不同的問題。了解這種區別是保護 API 的第一步。身份驗證 (AuthN):"你是誰?"#
身份驗證是驗證使用者、設備或系統身份的過程。它回答了問題:這個實體是他們聲稱的那個人嗎?常見的身份驗證因素#
2.
你擁有的:電話(SMS 代碼)、硬體金鑰、智慧型手機(驗證器應用程式)。
在 API 中#
在 API 的情境中,身份驗證通常發生一次(例如,交換使用者名/密碼以獲取 Token)或透過 API Key。範例:用戶端在 Header x-api-key: 12345 中傳送特定的 API Key。伺服器檢查其資料庫:「金鑰 12345 存在嗎?是的,它屬於 Alice。」-> Alice 已通過身份驗證。
授權 (AuthZ):"你能做什麼?"#
授權是確定已驗證身份擁有什麼權限的過程。它回答了問題:該使用者是否被允許對此特定資源執行此特定操作?在 API 中#
範例:Alice 已通過身份驗證(我們知道是她)。她試圖 DELETE /users/bob。伺服器檢查權限:「Alice 是管理員嗎?不是。Alice 擁有資源 'bob' 嗎?沒有。」
結果:403 Forbidden。Alice 已被識別,但未被授權。
比較表#
| 特性 | 身份驗證 (AuthN) | 授權 (AuthZ) |
|---|
| 問題 | 你是誰? | 你被允許做什麼? |
| 時機 | 首先發生。 | 發生在身份驗證之後。 |
| 機制 | 密碼、生物識別、API Keys。 | 權限、角色、Scopes、策略。 |
| 失敗代碼 | 401 Unauthorized | 403 Forbidden |
| 資料標準 | OpenID Connect (OIDC)、SAML。 | OAuth 2.0 (Scopes)。 |
真實世界比喻:飯店#
1.
身份驗證:你走到前台並出示你的身份證和信用卡。接待員確認你是你所說的人,並給你一張房卡。
2.
你感應它去員工專用室(操作)。它發出紅光(拒絕)。
在 API 中結合它們#
大多數現代 API 使用 OAuth 2.0(用於授權)通常與 OpenID Connect(用於身份驗證)搭配使用。1.
AuthN:使用者透過身份提供者(如 Google)登入。系統驗證憑證。
2.
AuthZ:提供者發出包含 Scopes(例如 read:profile, write:posts)的 Access Token。
3.
API 呼叫:用戶端將 Token 傳送給 API。API 驗證 Token 並檢查 Scopes 以允許或拒絕請求。
關鍵要點#
身份驗證 (AuthN) = 身份 (你是誰?) -> 返回 401。
授權 (AuthZ) = 權限 (存取權) -> 返回 403。
它們是不同的步驟,但在每個安全的 API 請求中協同工作。
Modified at 2025-12-29 09:35:19