loading...
上次更新: 2026-08-06
OAuth 是一種授權 (Authorization) 協定。
它的目的是讓第三方應用程式,在不取得使用者密碼的情況下,代表使用者存取受保護的資源。
OAuth 不管使用者是誰,它只關心:「這個 Client 是否有權限存取某個資源?」
因此 OAuth 發的 access token 是給 API 驗證權限用的。
User
│
│ 1. Login
│
Authorization Server
│
│ 2. code
│
Client
│
│ 3. code 換 Token
│
Authorization Server
│
│ 4. Access Token
│
Client
│
│ 5. 呼叫 API
│
Resource Server
Authorization Server(授權伺服器)負責驗證使用者身份、取得使用者同意授權,以及發行 Token。
在 OAuth 的流程中,它主要負責:
例如 Microsoft Entra ID, Google Identity 都可以作為 Authorization Server。
OIDC (OpenID Connect) 是建立在 OAuth 之上的身分驗證 (Authentication) 協定。
它的目的是讓 Client 知道:目前登入的使用者是誰
OIDC 在 OAuth 的流程中增加了一個 ID Token,用來描述登入使用者的身分資訊。它通常是一個 JWT (JSON Web Token),用來描述登入使用者的身分資訊。
內容大概長這樣:
{
"name": "Iris Yu",
"email": "iris@example.com",
"sub": "...",
"oid": "...",
...
}
因此
登入 Microsoft
↓
取得 ID Token
↓
知道使用者叫 Iris
Email 是 iris@...
OID 是 ...
MSAL 是 Microsoft 提供的函式庫,處理 OAuth / OIDC 的登入流程,以及 Token 的管理 (例如快取、過期檢查、Silent 更新等),讓開發者不用自己實作這些細節。
MSAL
├─ 使用 OIDC
│ └─ 取得 ID Token(知道登入的是誰)
│
└─ 使用 OAuth
└─ 取得 Access Token(呼叫受保護的 API)
| OAuth | OIDC |
|---|---|
| 解決授權(Authorization) | 解決身分驗證(Authentication) |
| 回傳 Access Token | 回傳 ID Token |
| 用來呼叫 API | 用來識別登入的使用者 |
| 關心「可以做什麼」 | 關心「你是誰」 |
| 不保證知道使用者身分 | 提供使用者身分資訊 |