# OAuth2 標準參數對照表
## 📌 1. GetAuthorizationUrl (授權網址產生)
| 參數名稱 | 是否標準 | 說明 |
|-----------------------|--------------|------|
| `client_id` | ✅ 是 | OAuth2 用戶端應用的 ID。 |
| `redirect_uri` | ✅ 是 | 使用者授權後導回的 URI。 |
| `response_type` | ✅ 是 | 通常為 `"code"`,表示要求授權碼。 |
| `scope` | ✅ 是 | 權限範圍,用空格分隔。 |
| `state` | ✅ 是 | CSRF 防護的隨機字串,會原樣返回。 |
| `code_challenge` | ✅(PKCE) | 使用 PKCE 時,需傳入 SHA256 編碼結果。 |
| `code_challenge_method`| ✅(PKCE) | 指定 PKCE 使用的方式,一般為 `S256`。 |
> 備註:前五項為 OAuth 2.0 核心協定([RFC 6749](https://tools.ietf.org/html/rfc6749)),後兩項為 PKCE 擴充([RFC 7636](https://tools.ietf.org/html/rfc7636))。
---
## 📌 2. GetAccessToken (授權碼換 Access Token)
| 參數名稱 | 是否標準 | 說明 |
|-----------------|----------|------|
| `client_id` | ✅ 是 | 用戶端應用的 ID。 |
| `client_secret` | ✅ 是 | 用戶端密鑰(公用應用可能不需要)。 |
| `grant_type` | ✅ 是 | 固定為 `authorization_code`。 |
| `code` | ✅ 是 | 使用者授權後取得的授權碼。 |
| `redirect_uri` | ✅ 是 | 與授權階段使用的 URI 必須一致。 |
| `code_verifier` | ✅(PKCE)| 搭配 `code_challenge`,原始未 hash 的字串。 |
---
## 📌 3. RefreshAccessToken (使用 Refresh Token 取得新 Access Token)
| 參數名稱 | 是否標準 | 說明 |
|-----------------|----------|------|
| `client_id` | ✅ 是 | 用戶端應用的 ID。 |
| `client_secret` | ✅ 是 | 用戶端密鑰(某些平台可省略)。 |
| `grant_type` | ✅ 是 | 固定為 `refresh_token`。 |
| `refresh_token` | ✅ 是 | 上一次取得的 refresh token。 |
| `scope` | ✅(可選)| 有些平台允許重新指定 scope。 |
---
## 📝 其他建議補充參數(依平台而異)
| 參數名稱 | 說明 | 適用平台 |
|------------------|------|-----------|
| `access_type=offline` | 要求授權時回傳 refresh_token | Google |
| `prompt=consent` | 強制顯示授權畫面(避免 silent login) | Google |
| `include_granted_scopes=true` | 自動保留使用者先前授權範圍 | Google |
---
## 🔒 安全建議
- 強烈建議所有公用用戶端(SPA、行動應用)**啟用 PKCE**。
- 儲存 `refresh_token` 時應加密保管,避免洩露。