本文檔解釋了安裝在手機、平板電腦和電腦等裝置上的應用程式如何使用 Google 的 OAuth 2.0 端點來授權存取 YouTube Analytics API 或 YouTube Reporting API。
OAuth 2.0 可讓使用者與應用程式共用特定資料,同時保有使用者名稱、密碼和其他資訊的隱私。舉例來說,應用程式可以使用 OAuth 2.0 取得權限,擷取頻道的 YouTube 數據分析資料。
已安裝的應用程式會發布到個別裝置,且假設這些應用程式無法保留密碼。他們可以在使用者使用應用程式時存取 Google API,也可以在應用程式於背景執行時存取。
這個授權流程與網路伺服器應用程式所用的流程類似。主要差異在於,已安裝的應用程式必須開啟系統瀏覽器,並提供本機重新導向 URI,才能處理 Google 授權伺服器的回應。
程式庫與範例
如果是 iOS 應用程式,建議使用最新版的「使用 Google 帳戶登入」 iOS SDK。這個 SDK 會處理使用者授權,而且相較於本指南中說明的低階通訊協定,實作起來更簡單。
如果應用程式是在不支援系統瀏覽器或輸入功能有限的裝置上執行,例如電視、遊戲主機、相機或印表機,請參閱「電視和裝置適用的 OAuth 2.0」或「在電視和輸入功能有限的裝置上登入」。
必要條件
為專案啟用 API
呼叫 Google API 的應用程式必須在 API Console中啟用這些 API。
如要為專案啟用 API,請按照下列步驟操作:
- Open the API Library 。 Google API Console
- If prompted, select a project, or create a new one.
- 在「程式庫」頁面中,找到並啟用 YouTube Analytics API 和 YouTube Reporting API。許多擷取 YouTube 數據分析資料的應用程式,也會與 YouTube Data API 介接。找出應用程式會使用的其他 API,並一併啟用。
建立授權憑證
凡是使用 OAuth 2.0 存取 Google API 的應用程式,都必須具備授權憑證,向 Google 的 OAuth 2.0 伺服器識別應用程式。下列步驟說明如何為專案建立憑證。應用程式隨後就能使用這些憑證,存取您為該專案啟用的 API。
- Go to the Clients page.
- 按一下「建立用戶端」。
- 以下各節說明 Google 授權伺服器支援的用戶端類型。選擇適合應用程式的用戶端類型、為 OAuth 用戶端命名,並視需要設定表單中的其他欄位。
iOS
- 選取「iOS」iOS應用程式類型。
- 輸入 OAuth 用戶端的名稱。這個名稱會顯示在專案的 Clients page 中,用於識別用戶端。
- 輸入應用程式的軟體包 ID。軟體包 ID 是應用程式資訊屬性清單資源檔案 (info.plist) 中 CFBundleIdentifier 鍵的值。這個值最常顯示在 Xcode 專案編輯器的「General」窗格或「Signing & Capabilities」窗格中。您也可以在 Apple App Store Connect 網站上,應用程式「App 詳細資料」頁面的「一般資訊」部分中,找到套裝組合 ID。
確認您使用的是正確的應用程式軟體包 ID,因為如果您使用 App Check 功能,就無法變更軟體包 ID。
- (選修的)
如果應用程式已發布至 Apple App Store,請輸入應用程式的 App Store ID。商店 ID 是包含在每個 Apple App Store URL 中的一個數字字串。
- 在 iOS 或 iPadOS 裝置上開啟 Apple App Store 應用程式。
- 搜尋您的應用程式。
- 選擇分享按鈕(方形和向上箭頭符號)。
- 選擇 複製連結。
- 將連結貼到文字編輯器中。App Store ID 是網址的最後一部分。
範例:
https://apps.apple.com/app/google/id284815942
- (選修的)
輸入團隊 ID。有關更多信息,請參閱 Apple 開發者帳戶文檔中的 查找您的團隊 ID。
注意: 如果您要為用戶端啟用套用檢查,則「團隊 ID」欄位為必填項。 - (選用)
為您的 iOS 應用程式啟用應用程式驗證。啟用應用驗證後,Apple 的 App Attest 服務 將用於驗證來自您的 OAuth 用戶端的 OAuth 2.0 請求是否真實有效,並且確實來自您的應用程式。這有助於降低應用程式被冒充的風險。 瞭解更多關於為您的 iOS 應用程式啟用 App Check 的資訊。
- 點選「建立」。
UWP
- 選取「通用 Windows 平台」應用程式類型。
- 請輸入 OAuth 客戶端的名稱。此名稱將顯示在您的項目 Clients page 上,用於識別客戶。
- 輸入您的應用程式的 12 位 Microsoft Store ID。您可以在以下位置找到此值:微軟合作夥伴中心在應用程式身分應用管理部分的頁面。
- 點選「建立」。
對於 UWP 應用,重定向 URI 是透過使用應用的唯一套件安全性識別碼 (SID) 形成的。您可以在 Visual Studio 專案的 Package.appxmanifest 檔案中找到應用程式的 Package SID。
在 Google Cloud 控制台中建立用戶端 ID 時,必須使用套件 SID 的小寫值,並以下列格式指定重新導向 URI:
ms-app://YOUR_APP_PACKAGE_SID
如為 UWP 應用程式,自訂 URI 配置不得超過 39 個字元,詳情請參閱 Microsoft 說明文件。
找出存取權範圍
範圍可讓應用程式僅要求存取其需要的資源,也能讓使用者控制對應用程式授予的存取量。因此,要求範圍的數量與取得使用者同意聲明的可能性之間,可能存在反向關係。
開始實作 OAuth 2.0 授權之前,建議您找出應用程式需要權限存取的範圍。
<0x0AYouTube 數據分析 API 使用下列範圍:
| 範圍 | 說明 |
|---|---|
https://www. |
管理您的 YouTube 帳戶 |
https://www. |
查看您的 YouTube 帳戶 |
https://www. |
查看及管理您在 YouTube 上的元素和相關內容 |
https://www. |
查看您 YouTube 內容的金額和非金額 YouTube 數據分析報表 |
https://www. |
查看您 YouTube 內容的 YouTube 數據分析報表 |
YouTube Reporting API 使用下列範圍:
| 範圍 | 說明 |
|---|---|
https://www. |
查看您 YouTube 內容的金額和非金額 YouTube 數據分析報表 |
https://www. |
查看您 YouTube 內容的 YouTube 數據分析報表 |
OAuth 2.0 API 範圍文件列出您可能用來存取 Google API 的完整範圍清單。
取得 OAuth 2.0 存取權杖
下列步驟說明應用程式如何與 Google 的 OAuth 2.0 伺服器互動,以取得使用者同意,代表使用者執行 API 要求。應用程式必須先取得這項同意聲明,才能執行需要使用者授權的 Google API 要求。
步驟 1:產生程式碼驗證碼和驗證
Google 支援 Proof Key for Code Exchange (PKCE) 通訊協定,讓已安裝應用程式的流程更加安全。系統會為每個授權要求建立專屬的驗證碼,並將轉換後的值 (稱為「code_challenge」) 傳送至授權伺服器,以取得授權碼。
建立程式碼驗證碼
code_verifier 是高熵密碼編譯隨機字串,使用未保留的字元 [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~",長度至少為 43 個字元,最多為 128 個字元。
驗證碼應有足夠的熵,讓他人無法猜出值。
建立驗證碼問題
系統支援兩種建立程式碼挑戰的方法。
| 程式碼挑戰生成方法 | |
|---|---|
| S256 (建議) | 程式碼挑戰是程式碼驗證碼的 Base64URL (不含填充) 編碼 SHA256 雜湊。
|
| plain | 程式碼挑戰與上述產生的程式碼驗證器值相同。
|
步驟 2:向 Google 的 OAuth 2.0 伺服器傳送要求
如要取得使用者授權,請傳送要求至 Google 的授權伺服器 https://accounts.google.com/o/oauth2/v2/auth。這個端點會處理有效工作階段的查詢、驗證使用者身分,並取得使用者同意聲明。端點只能透過 SSL 存取,且會拒絕 HTTP (非 SSL) 連線。
授權伺服器支援已安裝應用程式的下列查詢字串參數:
| 參數 | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
client_id |
必要
應用程式的用戶端 ID。您可以在 Cloud Console中找到這個值。 Clients page |
||||||||||||||||||
redirect_uri |
必要
決定 Google 授權伺服器如何將回應傳送至應用程式。已安裝的應用程式有多種重新導向選項,您在設定授權憑證時,會考量到特定的重新導向方法。 這個值必須與用戶端 Cloud Console
Clients page中 OAuth 2.0 用戶端的其中一個已授權重新導向 URI 完全相符,如果這個值與授權 URI 不符,您會收到 下表列出各個方法的適當
|
||||||||||||||||||
response_type |
必要
決定 Google OAuth 2.0 端點是否傳回授權碼。 將已安裝應用程式的參數值設為 |
||||||||||||||||||
scope |
必要
以空格分隔的範圍清單,用於識別應用程式可代表使用者存取的資源。這些值會提供資訊給 Google,決定要向使用者顯示的同意畫面。 範圍可讓應用程式僅要求存取其需要的資源,也能讓使用者控制對應用程式授予的存取量。因此,要求的範圍數量與取得使用者同意授權的可能性成反比。 YouTube 數據分析 API 使用下列範圍:
YouTube Reporting API 使用下列範圍:
OAuth 2.0 API 範圍文件提供您可能用來存取 Google API 的完整範圍清單。 |
||||||||||||||||||
code_challenge |
建議
指定編碼的 |
||||||||||||||||||
code_challenge_method |
建議
指定用於編碼 |
||||||||||||||||||
state |
建議
指定應用程式用來維護授權要求與授權伺服器回應之間狀態的任何字串值。在使用者同意或拒絕您的應用程式的存取請求後,伺服器會將您傳送的確切值作為 您可以使用此參數來實現多種目的,例如將使用者引導至應用程式中的正確資源、發送 nonce 以及緩解跨站請求偽造。由於 |
||||||||||||||||||
login_hint |
選填
如果應用程式知道要驗證的使用者是誰,就可以使用這個參數向 Google 驗證伺服器提供提示。伺服器會使用提示簡化登入流程,方法是在登入表單中預先填入電子郵件欄位,或是選取適當的多重登入工作階段。 將參數值設為電子郵件地址或 |
||||||||||||||||||
授權 URL 範例
下面的標籤頁顯示了不同重定向 URI 選項的範例授權 URL。
每個 URL 都請求存取一個允許檢索使用者 YouTube 分析報告的範圍。除了 redirect_uri 參數的值之外,這些 URL 完全相同。網址也包含必要參數 response_type 和 client_id,以及選用參數 state。每個網址都包含換行符號和空格,方便閱讀。
自訂 URI 配置
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyt-analytics.readonly& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=com.example.app%3A/oauth2redirect& client_id=client_id
環回 IP 位址
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyt-analytics.readonly& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=http%3A//127.0.0.1%3A9004& client_id=client_id
步驟 3:Google 提示使用者徵求同意
在此步驟中,使用者決定是否授予您的應用程式所要求的存取權限。在此階段,Google 會顯示一個同意窗口,其中顯示您的應用程式名稱以及它正在要求存取的 Google API 服務(使用使用者的授權憑證)和要授予的存取範圍摘要。使用者可以同意授予應用程式要求的一或多個範圍的存取權,也可以拒絕要求。
應用程式在這個階段不需要執行任何動作,只要等待 Google OAuth 2.0 伺服器的回應,確認是否已授予任何存取權即可。該回應將在下一步中解釋。
錯誤
向 Google 的 OAuth 2.0 授權端點發出要求時,系統可能會顯示面向使用者的錯誤訊息,而非預期的驗證和授權流程。常見錯誤代碼及建議解決方法如下:
admin_policy_enforced
由於 Google Workspace 管理員的政策,Google 帳戶無法授權一或多個要求範圍。請參閱 Google Workspace 管理員說明文章「 控管哪些第三方應用程式和內部應用程式可存取 Google Workspace 資料」,進一步瞭解管理員如何限制對所有範圍或機密和受限範圍的存取權,直到明確授予 OAuth 用戶端 ID 存取權為止。
disallowed_useragent
授權端點顯示在 Google 的 OAuth 2.0 政策禁止使用的內嵌使用者代理程式中。
iOS 和 macOS 開發人員在 WKWebView 中開啟授權要求時,可能會遇到這項錯誤。開發人員應改用 iOS 程式庫,例如 Google Sign-In for iOS 或 OpenID Foundation 的 AppAuth for iOS。
如果 iOS 或 macOS 應用程式在內嵌的使用者代理程式中開啟一般網頁連結,且使用者從您的網站前往 Google 的 OAuth 2.0 授權端點,網頁開發人員可能會遇到這個錯誤。開發人員應允許一般連結在作業系統的預設連結處理常式中開啟,包括通用連結處理常式或預設瀏覽器應用程式。SFSafariViewController 程式庫也是支援的選項。
org_internal
要求中的 OAuth 用戶端 ID 屬於專案,該專案限制只能存取特定 Google Cloud 機構中的 Google 帳戶。如要進一步瞭解這個設定選項,請參閱「設定 OAuth 同意畫面」說明文章中的「使用者類型」一節。
deleted_client
用來提出要求的 OAuth 用戶端已遭刪除。您可以手動刪除,也可以讓系統在未使用的用戶端 中自動刪除。刪除後的 30 天內均可還原用戶端。 瞭解詳情 。
invalid_grant
如果您使用程式碼驗證器和驗證,則 code_callenge 參數無效或遺漏。確認 code_challenge 參數設定正確。
更新存取權杖時,權杖可能已過期或失效。 再次驗證使用者身分,並徵求使用者同意,以取得新權杖。如果持續看到這則錯誤訊息,請確認應用程式設定正確無誤,且要求中使用的權杖和參數正確無誤。否則,該使用者帳戶可能已遭刪除或停用。
redirect_uri_mismatch
授權要求中傳遞的 redirect_uri 與 OAuth 用戶端 ID 的授權重新導向 URI 不符。在 Google Cloud Console
Clients page中,查看已授權的重新導向 URI。
傳遞的 redirect_uri 可能不適用於用戶端類型。
redirect_uri 參數可能參照已淘汰且不再支援的 OAuth 頻外 (OOB) 流程。請參閱遷移指南,更新整合項目。
invalid_request
您提出的要求有誤。可能原因如下:
- 要求格式有誤
- 要求缺少必要參數
- 要求使用的授權方法不受 Google 支援。確認 OAuth 整合功能使用建議的整合方法
- 重新導向 URI 使用了不支援的自訂配置。如果看到「Android 或 Chrome 應用程式不支援自訂 URI 配置」錯誤訊息,請參閱這篇文章,進一步瞭解自訂 URI 配置的替代方案。
步驟 4:處理 OAuth 2.0 伺服器回應
應用程式接收授權回應的方式取決於使用的重新導向 URI 配置。無論使用哪種配置,回應都會包含授權碼 (code) 或錯誤 (error)。舉例來說,error=access_denied 表示使用者拒絕要求。
如果使用者授予應用程式存取權,您可以按照下一個步驟的說明,使用授權碼交換存取權杖和更新權杖。
步驟 5:將授權碼換成更新和存取權杖
如要將授權碼換成存取權杖,請呼叫 https://oauth2.googleapis.com/token 端點,並設定下列參數:
| 欄位 | |
|---|---|
client_id |
從 Cloud Console Clients page取得的用戶端 ID。 |
client_secret |
選填
從 Cloud Console取得的用戶端密鑰。 Clients page |
code |
初始要求傳回的授權碼。 |
code_verifier |
您在步驟 1 中建立的驗證碼。 |
grant_type |
如 OAuth 2.0 規格所述,這個欄位的值必須設為 authorization_code。 |
redirect_uri |
專案中列出的其中一個重新導向 URI,位於指定 Cloud Console
Clients page 的client_id。 |
以下程式碼片段顯示要求範例:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=your_client_id& redirect_uri=http://127.0.0.1:9004& grant_type=authorization_code
Google 會傳回 JSON 物件,其中包含短期存取權杖和重新整理權杖,以回應這項要求。
回應包含下列欄位:
| 欄位 | |
|---|---|
access_token |
應用程式傳送的權杖,用於授權 Google API 要求。 |
expires_in |
存取權杖的剩餘生命週期 (以秒為單位)。 |
id_token |
注意:只有在要求包含身分範圍 (例如 openid、profile 或 email) 時,系統才會傳回這項屬性。這個值是 JSON Web Token (JWT),內含經過數位簽署的使用者身分資訊。 |
refresh_token |
可用於取得新存取權杖的權杖。更新權杖在使用者撤銷存取權或更新權杖到期前都有效。 請注意,系統一律會為已安裝的應用程式傳回重新整理權杖。 |
refresh_token_expires_in |
以秒為單位的重新整理權杖剩餘有效時間。只有在使用者授予限時存取權時,才會設定這個值。 |
scope |
access_token授予的存取權範圍,以不分大小寫的字串清單表示,並以空格分隔。 |
token_type |
傳回的權杖類型。此時,這個欄位的值一律會設為 Bearer。 |
以下程式碼片段為回應範例:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/yt-analytics.readonly https://www.googleapis.com/auth/calendar.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
步驟 6:檢查使用者授予的範圍
要求多項權限 (範圍) 時,使用者可能不會授予應用程式所有權限。應用程式必須驗證實際授予的範圍,並妥善處理部分權限遭拒的情況,通常是停用依賴這些遭拒範圍的功能。
不過也有例外狀況。如果 Google Workspace Enterprise 應用程式已取得網域範圍的授權委派,或是標示為可信任,系統就會略過精細權限同意畫面。這類應用程式不會顯示適當的權限同意畫面。應用程式會收到所有要求的範圍,或完全沒有。
詳情請參閱「如何處理精細權限」。
如要檢查使用者是否已授予應用程式特定範圍的存取權,請檢查存取權杖回應中的 scope 欄位。存取權範圍 (以空格分隔的字串清單表示,且區分大小寫)。
舉例來說,下列存取權杖回應範例指出,使用者已授予應用程式唯讀存取雲端硬碟活動和日曆活動的權限:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/yt-analytics.readonly https://www.googleapis.com/auth/calendar.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
呼叫 Google API
應用程式取得存取權杖後,如果已授予 API 要求的存取範圍,您就可以使用權杖代表特定使用者帳戶呼叫 Google API。如要這麼做,請在 API 要求中加入存取權杖,方法是加入 access_token 查詢參數或 Authorization HTTP 標頭 Bearer 值。如果可以,請盡量使用 HTTP 標頭,因為查詢字串通常會顯示在伺服器記錄中。大多數情況下,您可以使用客戶端程式庫來設定對 Google API 的呼叫(例如,當 呼叫 YouTube Analytics API 時)。
請注意,YouTube Analytics API 不支援服務帳戶流程。YouTube 報告 API 僅支援擁有和管理多個 YouTube 頻道的 YouTube 內容擁有者的服務帳戶,例如唱片公司和電影製片廠。
您可以在 OAuth 2.0 Playground 試用所有 Google API,並查看其範圍。
HTTP GET 範例
使用 Authorization: Bearer HTTP 標頭呼叫
reports.query 端點(YouTube Analytics API)可能如下所示。請注意,您必須指定自己的存取權杖:
GET /youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
以下是使用 access_token 查詢字串參數對已認證使用者呼叫相同 API 的範例:
GET https://www.googleapis.com/youtube/analytics/v1/reports?access_token=access_token&ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views
curl 範例
您可以使用 curl 命令列應用程式測試這些命令。以下是一個使用 HTTP 標頭選項(建議)的範例:
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views
或者,也可以使用查詢字串參數選項:
curl https://www.googleapis.com/youtube/analytics/v1/reports?access_token=access_token&ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views
刷新訪問令牌
存取令牌會定期過期,過期後將無法用於相關的 API 請求。如果您要求離線存取與令牌關聯的範圍,則可以在不提示使用者許可的情況下重新整理存取權杖(包括使用者不在場時)。
若要刷新存取權杖,您的應用程式會向 Google 的授權伺服器 (https://oauth2.googleapis.com/token) 發送 HTTPS POST 請求,其中包含以下參數:
| 欄位 | |
|---|---|
client_id |
從 API Console取得的客戶端 ID。 |
client_secret |
可選
從 API Console取得的客戶端金鑰。
( |
grant_type |
根據 OAuth 2.0 規格中定義的 ,此欄位的值必須設定為 refresh_token。 |
refresh_token |
從授權碼交換中傳回的刷新令牌。 |
以下程式碼片段展示了一個範例請求:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=your_client_id& refresh_token=refresh_token& grant_type=refresh_token
只要使用者沒有撤銷授予應用程式的存取權限,令牌伺服器就會傳回一個包含新存取權杖的 JSON 物件。以下程式碼片段展示了一個範例回應:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly", "token_type": "Bearer" }
請注意,刷新令牌的發放數量是有限制的;每個客戶端/使用者組合有一個限制,每個使用者在所有客戶端中還有一個限制。您應該將刷新令牌保存在長期儲存中,並在其有效期間繼續使用。如果您的應用程式請求的刷新令牌過多,則可能會遇到這些限制,在這種情況下,較舊的刷新令牌將停止運作。
權杖撤銷
在某些情況下,使用者可能希望撤銷授予應用程式的存取權限。使用者可以透過存取 帳戶設定 來撤銷存取權限。參見移除「第三方網站和應用程式對您帳戶的存取權限」部分。更多資訊請參閱支援文件。
應用程式也可以透過程式撤銷授予它的存取權限。 在用戶取消訂閱、刪除應用程式或應用程式所需的 API 資源發生重大變化的情況下,程式化撤銷非常重要。換句話說,移除過程的一部分可以包括向 API 發送請求,以確保移除先前授予應用程式的權限。
若要以程式方式撤銷令牌,您的應用程式需要向 https://oauth2.googleapis.com/revoke 發出請求,並將令牌作為參數包含在內:
curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
https://oauth2.googleapis.com/revoke?token={token}該令牌可以是存取令牌或刷新令牌。如果該令牌是存取令牌,並且它有對應的刷新令牌,則刷新令牌也會被撤銷。
如果撤銷作業處理成功,回應的 HTTP 狀態碼為 200。發生錯誤時,系統會傳回 HTTP 狀態碼 400 和錯誤碼。
應用程式重定向方法
自訂 URI 配置
自訂 URI 方案是一種深度連結形式,它使用自訂定義的方案來開啟您的應用程式。
Chrome 應用程式中使用自訂 URI 方案的替代方案
使用 Chrome Identity API,它將 OAuth 2.0 回應直接傳遞給您的應用,無需重新導向 URI。
環回 IP 位址(macOS、Linux、Windows 桌面)
若要使用此 URL 接收授權碼,您的應用程式必須監聽本機 Web 伺服器。很多平台都支援這種功能,但並非所有平台都支援。但是,如果您的平台支持,這是獲取授權碼的推薦方法。
當您的應用程式收到授權回應時,為了獲得最佳使用者體驗,它應該顯示一個 HTML 頁面來指示使用者關閉瀏覽器並返回您的應用程式。
| 推薦用法 | macOS、Linux 和 Windows 桌面(但不包括通用 Windows 平台)應用程式 |
| 表單值 | 將應用程式類型設定為 桌面應用程式。 |
手動複製/貼上(已棄用)
保護您的應用
驗證 Chrome 應用程式的所有權
您可以驗證應用程式的所有權,以降低應用程式被冒用的風險。
要完成驗證過程,您需要使用您的 Chrome 線上應用程式商店開發者帳戶。 成功通過驗證必須符合以下要求:
- 您必須在 Chrome 線上應用程式商店開發者控制面板 中註冊一個項目,該項目的 ID 與您正在完成驗證的 Chrome 擴充功能 OAuth 用戶端的 ID 相同。
- 您必須是 Chrome 線上應用程式商店商品的發布者。 瞭解更多關於 Chrome 網上應用程式商店開發者控制面板中的存取管理資訊。
在 Chrome 擴充功能客戶端的 驗證套用所有權 部分,點選 驗證所有權 按鈕完成驗證程序。
注意: 授予帳號存取權限後,請等待幾分鐘再完成驗證程序。
如果驗證成功,將顯示通知以確認驗證過程成功。否則,將顯示錯誤提示。
若要修復驗證失敗的問題,請嘗試以下操作:
應用程式檢查(僅限 iOS)
App Check 功能透過使用 Apple 的 App Attest 服務 來驗證向 Google OAuth 2.0 端點發出的請求是否來自您的正版應用程序,從而幫助保護您的 iOS 應用程式免受未經授權的使用。這有助於降低應用程式冒充的風險。
為您的 iOS 用戶端啟用應用程式檢查
若要成功為您的 iOS 用戶端啟用應用程式檢查,必須符合以下要求:- 您必須為您的 iOS 用戶端指定團隊 ID。
- 您的應用程式包 ID 中不得使用通配符,因為它可能解析為多個應用程式。這表示應用程式包 ID 不得包含星號 (*) 符號。
啟用套用檢查後,您將在 OAuth 用戶端的編輯檢視中開始看到與用戶端的 OAuth 請求相關的指標。在您 強制執行應用程式檢查 之前,來自未經驗證來源的請求不會被封鎖。指標監控頁面中的資訊可以幫助您確定何時開始強制執行。
為 iOS 應用程式啟用 App Check 時,可能會看到與 App Check 功能相關的錯誤。如要修正這些錯誤,請嘗試下列做法:
- 確認您指定的軟體包 ID 和團隊 ID 有效。
- 確認您並未使用軟體包 ID 的萬用字元。
對 iOS 用戶端強制執行 App Check
為應用程式啟用 App Check 時,系統不會自動封鎖無法辨識的要求。如要強制執行這項保護措施,請前往 iOS 用戶端的編輯檢視畫面。您會在頁面右側的「Google Identity for iOS」部分下方,看到 App Check 指標。指標包括下列資訊:- 已驗證的要求次數:具備有效 App Check 權杖的要求。啟用 App Check 強制執行功能後,只有這類要求會成功。
- 未經驗證的要求數量:可能過時的用戶端要求 - 缺少 App Check 權杖的要求;這些要求可能來自不含 App Check 實作項目的舊版應用程式。
- 未經驗證的要求數量:來源未知的要求 - 不具備 App Check 權杖的要求,且看起來不像是來自您的應用程式。
- 未驗證請求數:無效請求 - 帶有無效 App Check 令牌的請求,這些請求可能來自試圖冒充您的應用程式的未經驗證的用戶端,或來自模擬環境。
若要強制執行應用程式檢查,請點選 ENFORCE 按鈕並確認您的選擇。一旦強制執行生效,您客戶的所有未經核實的請求都將被拒絕。
注意:啟用強制執行後,更改最多可能需要 15 分鐘才能生效。
取消 iOS 用戶端的應用程式檢查
取消應用程式檢查將停止 強制執行,並允許客戶端向 Google OAuth 2.0 端點發出所有請求,包括未經驗證的請求。
若要取消 iOS 用戶端的應用程式檢查,請導覽至 iOS 用戶端的編輯視圖,然後按一下 取消檢查 按鈕並確認您的選擇。
注意: 取消強制執行應用檢查後,更改最多可能需要 15 分鐘才能生效。
禁用 iOS 用戶端的應用程式檢查
停用應用程式檢查將停止所有應用程式檢查監控和 強制執行。請考慮改為執行 unenforcing App Check,以便您可以繼續監控客戶的指標。
若要停用 iOS 用戶端的 App Check,請導覽至 iOS 用戶端的編輯視圖,然後關閉 使用 Firebase App Check 保護您的 OAuth 用戶端免受濫用 開關按鈕。
注意:停用應用程式檢查後,更改最多可能需要 15 分鐘才能生效。
以時間為依據的存取權
使用者可授予應用程式限時存取權,讓應用程式在一段時間內存取資料,以完成特定操作。在同意聲明流程中,使用者可選擇授予限時存取權,這項功能適用於特定 Google 產品。例如 Data Portability API 可讓您一次性轉移資料。
使用者授予應用程式限時存取權時,更新權杖會在指定時間後失效。請注意,在特定情況下,重新整理權杖可能會提早失效;詳情請參閱這些案例。在這種情況下,授權碼交換回應中傳回的 refresh_token_expires_in 欄位,代表重新整理權杖到期前的剩餘時間。
延伸閱讀
IETF 最佳實踐 OAuth 2.0 for Native Apps 確立了許多此處記錄的最佳實踐。
實施跨帳戶保護
為保護使用者帳戶,您應採取額外步驟,利用 Google 的跨帳戶保護服務實作跨帳戶保護機制。這項服務可讓您訂閱安全性事件通知,向應用程式提供使用者帳戶重大變更的相關資訊。然後根據您決定如何回應事件,採取適當行動。
Google 跨帳戶保護服務傳送給應用程式的事件類型包括:
-
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked -
https://schemas.openid.net/secevent/oauth/event-type/token-revoked -
https://schemas.openid.net/secevent/risc/event-type/account-disabled
如要進一步瞭解如何實作跨帳戶保護功能,以及查看可用事件的完整清單,請參閱「 透過跨帳戶保護功能保護使用者帳戶 」頁面。