---
title: "AAA | Authentication, Authorization, Audit Logging"
section: "til"
description: "簡單介紹 AAA（驗證、授權、審計），打造更安全的系統！"
published: 2025-10-12
author: "Yeee"
canonical: https://kogitore.com/til/aaa-account-authentication-authorization
---

# AAA | Authentication, Authorization, Audit Logging

> 簡單介紹 AAA（驗證、授權、審計），打造更安全的系統！

## What is AAA

AAA 是一套關於「誰、能做什麼、做了什麼」的標準流程，確保系統安全且可溯源。

就像走進銀行金庫：
- 你先證明自己是誰 -> **驗證（Authentication）**
- 銀行決定你能否進金庫 -> **授權（Authorization）**
- 銀行會記錄你進出過金庫、動過哪些保險箱 -> **審計Audit Logging）**

驗證（Authentication）和授權（Authorization）常被混淆，我以前也搞錯過。  
搞清楚它們的界線，是打造安全系統的第一步。少了其中任何一個，資安防線就會 ——  
◢▆▅▄▃ 崩╰(〒皿〒)╯潰 ▃▄▅▆◣ 

---

## Authentication - 驗證

> Authentication（簡稱 AuthN），是「證明你就是你所說的那個人」。

常見驗證方式：
- **你知道的事**：密碼、PIN、金鑰、安全問題（別用問題「你第一隻寵物的名字」當答案噢！）
- **你擁有的物品**：身份證、工作卡、安全金鑰、行動裝置
- **你本身的特徵**：指紋、臉、聲音、虹膜

建議採用**多因素驗證（MFA）**，就像大門有雙重鎖：指紋不夠，還需虹膜辨識才能進門，大幅提升安全性。

有更多疑問？請參考~~ 電影《Mission: Impossible》~~
[OWASP Authentication Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html)。

---

## Authorization - 授權

> Authorization（簡稱 AuthZ）是「你被允許做哪些事」。

通過身份驗證後，系統會根據你的角色與權限，決定能存取哪些資源。 
常見的授權實作如下：
- **角色權限（RBAC）**：例如員工、經理、系統管理員
- **資源存取控制清單（ACL）**：針對每個檔案或 API 設定權限
- **條件式規則**：根據地理位置、時間或裝置來源決定能否操作（像 Netflix 根據地區顯示不同影片）

**進階概念**：
- **零信任（Zero Trust）**：不信任任何用戶，每次操作都需驗證。
- **最小權限原則**：只給予完成任務所需的最低權限，例如實習生無法刪除資料庫。
- **限時授權**：權限有時間限制，過期後自動失效，減少風險。

---

## Audit Logging - 審計 

> Audit Logging（或稱為 Accounting）記錄「誰在什麼時間做了什麼」。

這一步常被忽略，但它是優秀系統的核心支柱。  
它不只是「流水帳」，更是資安事件發生時的真相來源，幫助追蹤責任與還原事件。
就像是飛機上的黑匣子！

在帳號系統中，Audit Logging 通常包括：
- 登入與登出紀錄
- API 存取日誌
- 權限變更紀錄
- 管理員操作追蹤

換句話說，它能回答這些問題：
- 誰刪除了那筆資料？
- 誰在凌晨三點登入了伺服器？
- 誰把客戶的錢轉走再轉回來？

沒有這層紀錄，整個系統就像沒有監視器的銀行：出了事，每個人都會說不是我。

**小提醒**：日誌需妥善儲存並防止篡改，確保可信度。

---

## 一點例子

**例子 1**
1. 你登入 Netflix，系統確認你是帳號主人。 → **驗證 AuthN**
2. Netflix 檢查你的方案與地區，只開放 1080p 的台灣片庫 → **授權 AuthZ** 
3. Netflix 紀錄你昨天看了三集《The Big Bang Theory》 → **審計 Audit Logging**

**例子 2**
1. 你呼叫 API `/users/login` → 驗證帳號密碼（AuthN）  
2. 後端發出 JWT Token，限制角色 `user` 只能呼叫 `/profile` 而非 `/admin` → （AuthZ）  
3. 系統在資料庫的 `audit_logs` 表裡記下 `"user_id=123"` 於 `2025-10-12 19:45` 呼叫了 `/profile/update` → （Audit Logging）

---

## 小結

AAA 是系統安全的三層保險：
- **AuthN：我是不是我**
- **AuthZ：我能不能做**
- **Audit Logging：我做了什麼**

理解這三個「A」，能讓你的系統更安全，無論是個人帳號還是企業應用。  
試著在你的專案中實作 AAA，打造固若金湯的資安防線吧！

---
原始 HTML 頁面：https://kogitore.com/til/aaa-account-authentication-authorization