最佳做法

本頁說明整合 OAuth 2.0 的一般最佳做法。除了適用於應用程式類型和開發平台的特定指南外,也請考慮採用下列最佳做法。另請參閱準備好發布應用程式的建議Google 的 OAuth 2.0 政策

安全地處理用戶端憑證

OAuth 用戶端憑證會識別應用程式的身分,請務必謹慎處理。請務必將這些憑證儲存在安全儲存空間,例如使用 Google Cloud Secret Manager 等密鑰管理工具。請勿將憑證硬式編碼、提交至程式碼存放區或公開發布。

安全處理使用者權杖

使用者權杖包括應用程式使用的更新權杖和存取權杖。安全地靜態儲存權杖,且絕不以純文字傳輸權杖。使用適合您平台的安全儲存系統,例如 Android 的 Keystore、iOS 和 macOS 的 Keychain Services,或是 Windows 的 Credential Locker。

撤銷不再需要的權杖,並從系統中永久刪除。

此外,也請考慮為平台採用下列最佳做法:

使用 DPoP 的傳送者限制權杖

為保護應用程式免於權杖遭竊和重送攻擊,請考慮使用 DPoP (Demonstrating Proof-of-Possession) 限制權杖的傳送者。標準 Bearer 權杖遭到攔截時,任何一方都能使用,但 DPoP 權杖會以密碼編譯方式繫結至用戶端產生及持有的專屬金鑰配對。

使用 DPoP 時,用戶端會在要求或重新整理權杖時,向權杖端點出示證明 (已簽署的 JSON Web Token)。這項證明會顯示用戶端擁有與繫結至權杖的公開金鑰相應的私密金鑰。如果與 DPoP 綁定的更新權杖外洩,攻擊者沒有私密金鑰就無法重播。

DPoP 會與 PKCE 搭配運作,提供全面防護:

  • PKCE 會在初始重新導向流程中保護授權碼。
  • DPoP 可保護長期有效的更新權杖,防止遭駭時發生重送攻擊。

如果您的應用程式符合下列情況,強烈建議採用 DPoP:

  • 以公開用戶端 (例如單頁應用程式或安裝版應用程式) 運作,這類用戶端的重新整理權杖較容易遭到外洩。
  • 存取高度機密資料或高價值 API,導致權杖外洩的影響重大。
  • 必須符合嚴格的法規遵循或安全標準,規定只能使用受限於傳送者的權杖。

如需建構 DPoP 驗證和要求 DPoP 繫結權杖的詳細操作說明,請參閱 DPoP 說明文件

使用狀態參數

處理 OAuth 2.0 回應前,請確認從 Google 收到的 state 與授權要求中傳送的 state 相符。state 參數應為應用程式產生的不重複值,且無法猜測。

使用 state 參數有助於確保提出要求的是使用者,而非惡意指令碼,並降低跨網站偽造要求 (CSRF) 攻擊的風險。

處理更新權杖遭撤銷和過期的情況

如果應用程式已要求離線存取權的重新整理權杖,您也必須處理權杖失效或過期的情況。權杖可能因各種原因而失效,例如權杖可能已過期,或是使用者或自動程序撤銷了應用程式的存取權。在這種情況下,請仔細考量應用程式應如何回應,包括在使用者下次登入時提示他們,或是清理他們的資料。如要接收權杖撤銷通知,請整合跨帳戶防護服務。

使用增量授權

應用程式需要某項功能時,請使用增量授權要求適當的 OAuth 範圍。

除非是應用程式核心功能所必需,否則您不應在使用者首次驗證時要求存取資料。請遵循盡可能選取最小、最有限的範圍原則,只要求工作所需的特定範圍。

請務必在相關情境中要求範圍,協助使用者瞭解應用程式要求存取權的原因,以及資料的用途。

舉例來說,您的應用程式可能遵循下列模型:

  1. 使用者向您的應用程式驗證身分
    1. 未要求其他範圍。應用程式提供基本功能,讓使用者探索及使用不需要任何額外資料或存取權的功能。
  2. 使用者選取需要存取額外資料的功能
    1. 您的應用程式會針對這項功能所需的特定 OAuth 範圍發出授權要求。如果這項功能需要多個範圍,請遵循多個範圍的最佳做法
    2. 如果使用者拒絕要求,應用程式會停用該功能,並提供額外背景資訊,讓使用者再次要求存取權。

處理多個範圍的同意聲明

一次要求多個範圍時,使用者可能不會授予您要求的所有 OAuth 範圍。如果使用者拒絕授權範圍,應用程式應停用相關功能。

如果應用程式的基本功能需要多個範圍,請先向使用者說明,再提示他們同意。

只有在使用者明確表示要使用需要該範圍的特定功能時,您才能再次提示使用者。應用程式應先向使用者提供相關背景資訊和理由,再要求 OAuth 範圍。

請盡量減少應用程式一次要求授權的範圍數量。請改用增量授權,在功能背景資訊充足的情況下要求範圍。

使用安全瀏覽器

在網路上,OAuth 2.0 授權要求只能透過功能齊全的網頁瀏覽器提出。 在其他平台上,請務必選取正確的 OAuth 用戶端類型,並視平台需要整合 OAuth。請勿透過嵌入式瀏覽環境重新導向請求,包括行動平台上的 WebView,例如 Android 上的 WebView 或 iOS 上的 WKWebView。請改用建議的 OAuth 程式庫或平台適用的 Google 登入功能。

手動建立及設定 OAuth 用戶端

為防止濫用,OAuth 用戶端無法透過程式建立或修改。您必須使用 Google Cloud 控制台明確確認服務條款、設定 OAuth 用戶端,並準備進行 OAuth 驗證。

如果是自動化工作流程,請考慮改用服務帳戶

移除未使用的 OAuth 用戶端

定期稽核 OAuth 2.0 用戶端,並主動刪除應用程式不再需要或已過時的用戶端。如果設定了未使用的用戶端,一旦用戶端憑證遭盜用,用戶端就可能遭到濫用,造成潛在的安全風險。

為進一步降低未使用用戶端帶來的風險,系統會 自動刪除閒置六個月的 OAuth 2.0 用戶端。

建議的最佳做法是不要等待系統自動刪除,而是主動移除未使用的用戶端。這種做法可縮小應用程式的攻擊面,確保良好的安全衛生。