# 建立 Google Cloud 專案
- 進入 https://console.cloud.google.com 並登入 Google 帳戶。
- 建立新專案並命名,例如 Google login。
- 選取剛建立的專案,開啟「API 與服務」>「憑證」。
# 設定 OAuth 同意畫面
- 選擇使用者類型為「外部」。
- 填寫應用程式名稱與開發者聯絡資訊。
- 新增 Scopes,例如:email、profile。
- 新增測試用戶(需為你有權登入的 Gmail)。
# 建立 OAuth 2.0 憑證
- 點選建立憑證,選擇 OAuth 用戶端 ID。
- 選擇應用程式類型為「網頁應用程式」。
- 在授權的重新導向 URI 中加入 Postman 的 redirect URL。
# 設定 Postman 取得 Access Token
- 在 Postman 的 Authorization 標籤選擇 OAuth 2.0。
- Grant Type 選擇 Authorization Code。
- 填入 Client ID、Client Secret。
- 加入所需的 scope(如 userinfo.email)。
- 點擊「Get New Access Token」,使用測試帳號登入授權。
- 若出現彈跳視窗問題,需至瀏覽器開啟彈窗權限。
- 登入後取得 Access Token 並儲存使用。
# 使用 Token 呼叫 Google API
- 嘗試透過 Token 呼叫 Google Cloud API(例如查詢專案列表)。
- 若出現 insufficient authentication scopes,需新增額外 scope。
- 多個 scope 可用空格分隔並重新取得新 token。
# 啟用 Google Cloud Resource Manager API
- 進入專案中的「啟用 API 與服務」。
- 搜尋並啟用「Cloud Resource Manager API」。
- 啟用後重新發送請求,即可成功取得專案清單。
# Resource
* [Cloud Resource Manager API ](https://cloud.google.com/resource-manager/reference/rest)
---

欄位 | 值
| -------- | -------- |
Grant Type | Authorization Code
Callback URL | https://oauth.pstmn.io/v1/callback(跟你在 Google Console 設的一樣)
Auth URL | https://accounts.google.com/o/oauth2/v2/auth
Access Token URL | https://oauth2.googleapis.com/token
Client ID | 你在 Google Console 建立的
Client Secret | 同上
Scope | openid email profile https://www.googleapis.com/auth/youtube https://www.googleapis.com/oauth2/v3/userinfo
State | 可以空白
Client Authentication | Send as Basic Auth header
```
ya29.a0AW4Xtxg05zKSGgLvSBDw-Qmmp88zZVyHrPlaXpZ8MaZRs3-j78p41gPwNOxcxtlDAz1erzX5aHK2tJCtXGjs18-_toyN9eOVdHUDfw_dsAp-mR5aqZEzv4X3qDNcwFLiJ9uWUe3eBZyZlLpkTUPaBA3MCJY8KIRfijze0YUHMHMaCgYKAVUSARUSFQHGX2MiRfF2HB6phHptmzDLtSLDQQ0178
```
```
526518801458-1ggj4pothqg4o1pagjoq0mf7us19ui7s.apps.googleusercontent.com
```
```
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
```
```
let response = pm.response.json();
pm.globals.set("google_access_token", response.access_token);
```


# Terminology
- Google Cloud Console:Google 提供的雲端平台管理介面,用來建立與管理雲端專案與資源。
- OAuth 2.0:一種授權框架,允許第三方應用程式存取使用者資源而不洩漏密碼。
- Client ID:OAuth 中辨識應用程式身分的唯一識別碼。
- Client Secret:OAuth 中的密鑰,用來驗證應用程式身分。
- Redirect URI:OAuth 驗證成功後導回應用程式的網址。
- Authorization Code:OAuth 驗證流程中,授權伺服器提供的暫時代碼。
- Access Token:OAuth 授權後取得的存取令牌,用於存取受保護資源。
- Refresh Token:用於延長存取權限效期的令牌。
- Postman:API 測試工具,用來發送請求並查看回應。
- Token Name:Postman 中自訂存取令牌的名稱。
- Scope:OAuth 中的權限範圍,用來指定授權存取哪些資料。
- Email Scope:允許應用程式存取使用者的電子郵件資訊。
- Userinfo.email:OAuth 的一個範圍,取得使用者的 email。
- userinfo.profile:OAuth 的一個範圍,取得使用者的基本個人資料。
- External User Type:OAuth 同意畫面中允許外部使用者登入的選項。
- OAuth Consent Screen:OAuth 流程中顯示給使用者授權資訊的頁面。
- Google Cloud Project:Google Cloud 中的專案單位,用來管理資源和 API。
- Credentials:在 Google Cloud 中的憑證,用於 OAuth 驗證。
- API & Services:Google Cloud 中的服務管理入口,可啟用各種 API。
- OAuth Client ID:用於建立 OAuth 憑證的選項,產生 client ID 和 secret。
- Web Application:OAuth 應用類型之一,常見於前端應用程式。
- Test Users:在測試模式中允許登入應用的使用者帳號。
- Authorization Tab:Postman 中設定授權方式的分頁。
- Grant Type:OAuth 中的授權類型,例如 Authorization Code。
- Get New Access Token:Postman 中的按鈕,用於產生新的存取令牌。
- Popup Blocker:瀏覽器中阻擋彈出視窗的功能,需要關閉以進行 OAuth 登入。
- Privacy and Security:瀏覽器中設定隱私與安全性選項的位置。
- Site Settings:瀏覽器中針對特定網站的設定頁面。
- Cloud Resource Manager API:Google Cloud 提供的 API,用於管理專案與資源。
- Enable API:在 Google Cloud 中啟用 API 服務的動作。
- API Disabled Error:API 未啟用時會回傳的錯誤訊息。
- API Permissions:授權應用存取特定 Google API 的權限。
- Insufficient Authentication Scopes:OAuth 權限範圍不足的錯誤訊息。
- JSON 憑證檔:包含 client ID 和 client secret 的 JSON 格式檔案。
- Open in Browser:Postman 中使用瀏覽器開啟 OAuth 登入畫面的選項。
- Proceed:授權完成後在 Postman 中繼續流程的按鈕。
- Token Expiration:OAuth 存取令牌的有效時間。
- Authorization Error:授權流程中出現錯誤的訊息。
- API Call:發送 API 請求至伺服器取得或操作資料的動作。
- API Response:伺服器回應 API 請求所傳回的資料。
- Cloud Project ID:Google Cloud 專案的唯一識別碼。
- Deleted Project:已刪除但仍可見於列表中的 Google Cloud 專案。
- Testing Mode:OAuth 應用仍在測試階段,只限特定使用者登入。
- Dashboard:Google Cloud 中的主控台,用於查看項目總覽。
- Create Credentials:建立新的 API 憑證流程。
- Add Scope:在 OAuth 同意畫面中加入新的授權範圍。
- Save and Continue:儲存當前 OAuth 設定並繼續下一步。
- Summary Screen:設定流程的摘要畫面。
- Developer Contact Info:開發者聯絡資訊,顯示於 OAuth 同意畫面。
- Authorization URL:發起 OAuth 授權請求時所使用的網址。
- Token Exchange:OAuth 流程中將授權碼兌換為存取令牌的步驟。
- Consent Prompt:使用者登入時顯示的授權同意提示。