本文說明安裝在手機、平板電腦和電腦等裝置上的應用程式,如何使用 Google 的 OAuth 2.0 端點授權存取 YouTube Data API。
OAuth 2.0 可讓使用者與應用程式共用特定資料,同時保有使用者名稱、密碼和其他資訊的隱私。舉例來說,應用程式可使用 OAuth 2.0 取得權限,將影片上傳至使用者的 YouTube 頻道。
已安裝的應用程式會發布至個別裝置,且假設這些應用程式無法保留密碼。使用者在應用程式中時,或應用程式在背景執行時,這類應用程式都可以存取 Google API。
這個授權流程與網頁伺服器應用程式使用的流程類似。主要差異在於,已安裝的應用程式必須開啟系統瀏覽器,並提供本機重新導向 URI,才能處理 Google 授權伺服器的回應。
程式庫與範例
如果是行動應用程式,建議使用最新版的 Google Identity Services 原生程式庫 (適用於 Android) 和 Google 登入原生程式庫 (適用於 iOS)。這些程式庫會處理使用者授權,且相較於本文所述的低階通訊協定,實作起來更簡單。
如果應用程式是在不支援系統瀏覽器或輸入功能受限的裝置上執行 (例如電視、遊戲主機、相機或印表機),請參閱「電視和裝置適用的 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 Data API。找出應用程式會使用的任何其他 API,並一併啟用。
建立授權憑證
凡是使用 OAuth 2.0 存取 Google API 的應用程式,都必須具備授權憑證,向 Google 的 OAuth 2.0 伺服器識別應用程式。下列步驟說明如何為專案建立憑證。應用程式隨後就能使用這些憑證,存取您為該專案啟用的 API。
- Go to the Credentials page.
- 按一下「建立用戶端」。
- 以下各節說明 Google 授權伺服器支援的用戶端類型。選擇適合應用程式的用戶端類型、為 OAuth 用戶端命名,並視需要設定表單中的其他欄位。
Android
- 選取「Android」Android應用程式類型。
- 輸入 OAuth 用戶端的名稱。這個名稱會顯示在專案的 中,用於識別用戶端。
- 輸入 Android 應用程式的套件名稱。這個值是在應用程式資訊清單檔案中,
<manifest>
元素的package
屬性中定義。 - 輸入應用程式發布版本的 SHA-1 簽署憑證指紋。
- 如果您的應用程式使用 Google Play 應用程式簽署,請從 Play 管理中心的應用程式簽署頁面複製 SHA-1 指紋。
- 如果您自行管理 KeyStore 和簽署金鑰,請使用 Java 隨附的 keytool 公用程式,以人類可解讀的格式列印憑證資訊。複製 keytool 輸出內容
Certificate fingerprints
部分中的SHA1
值。詳情請參閱 Android 適用的 Google API 說明文件中的「驗證用戶端」。
- (選用) 驗證 Android 應用程式的擁有權。
- 點選「建立」。
iOS
- 選取「iOS」iOS應用程式類型。
- 輸入 OAuth 用戶端的名稱。這個名稱會顯示在專案的 中,用於識別用戶端。
- 輸入應用程式的軟體包 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。Store ID 是每個 Apple App Store 網址中包含的數值字串。
- 在 iOS 或 iPadOS 裝置上開啟 Apple App Store 應用程式。
- 搜尋您的應用程式。
- 選取「分享」按鈕 (正方形和向上箭頭符號)。
- 選取「複製連結」。
- 將連結貼到文字編輯器中。App Store ID 是網址的最後一部分。
範例:
https://apps.apple.com/app/google/id284815942
- (選用)
輸入團隊 ID。詳情請參閱 Apple 開發人員帳戶說明文件中的「找出團隊 ID」。
注意:如果您要為用戶端啟用 App Check,請務必填寫「團隊 ID」欄位。 - (選用)
為 iOS 應用程式啟用 App Check。啟用 App Check 後,系統會使用 Apple 的 App Attest 服務,驗證 OAuth 用戶端發出的 OAuth 2.0 要求是否為正版,以及是否來自您的應用程式,藉此降低應用程式遭冒用的風險。進一步瞭解如何為 iOS 應用程式啟用 App Check。
- 點選「建立」。
UWP
- 選取「通用 Windows 平台」應用程式類型。
- 輸入 OAuth 用戶端的名稱。這個名稱會顯示在專案的 中,用於識別用戶端。
- 輸入應用程式的 12 個字元 Microsoft Store ID。您可以在Microsoft 合作夥伴中心的「應用程式管理」部分,找到「應用程式身分」頁面上的這個值。
- 點選「建立」。
如果是 UWP 應用程式,自訂 URI 配置的長度不得超過 39 個字元。
找出存取權範圍
範圍可讓應用程式僅要求存取其需要的資源,也能讓使用者控制對應用程式授予的存取量。因此,要求範圍的數量與取得使用者同意聲明的可能性之間,可能存在反向關係。
開始實作 OAuth 2.0 授權之前,建議您找出應用程式需要權限存取的範圍。
<0x0AYouTube Data API v3 使用下列範圍:
範圍 | 說明 |
---|---|
https://www. |
管理您的 YouTube 帳戶 |
https://www. |
查看您現有的有效頻道會員清單,以及這些會員目前的級別和成為會員的時間點 |
https://www. |
查看、編輯並永久刪除您的 YouTube 影片、評分、留言和字幕 |
https://www. |
查看您的 YouTube 帳戶 |
https://www. |
管理您的 YouTube 影片 |
https://www. |
查看及管理您在 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 伺服器傳送要求
如要取得使用者授權,請在 https://accounts.google.com/o/oauth2/v2/auth
向 Google 的授權伺服器傳送要求。這個端點會處理有效工作階段的查詢、驗證使用者身分,並取得使用者同意聲明。端點只能透過 SSL 存取,且會拒絕 HTTP (非 SSL) 連線。
授權伺服器支援已安裝應用程式的下列查詢字串參數:
參數 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
client_id |
必要
應用程式的用戶端 ID。您可以在 中找到這個值。 |
||||||||||||||||
redirect_uri |
必要
決定 Google 授權伺服器如何將回應傳送至應用程式。已安裝的應用程式有多種重新導向選項,您在設定授權憑證時,會考量到特定的重新導向方法。 這個值必須與 OAuth 2.0 用戶端的其中一個授權重新導向 URI 完全相符,您可以在用戶端的
中設定。如果這個值與授權 URI 不符,您會收到 下表列出各方法的適當
|
||||||||||||||||
response_type |
必要
決定 Google OAuth 2.0 端點是否傳回授權碼。 將已安裝應用程式的參數值設為 |
||||||||||||||||
scope |
必要
以空格分隔的範圍清單,用於識別應用程式可代表使用者存取的資源。這些值會提供資訊給 Google,決定要向使用者顯示的同意畫面。 範圍可讓應用程式僅要求存取其需要的資源,也能讓使用者控制對應用程式授予的存取量。因此,要求範圍的數量與取得使用者同意授權的可能性成反比。 YouTube Data API v3 使用下列範圍:
OAuth 2.0 API 範圍文件提供您可能用來存取 Google API 的完整範圍清單。 |
||||||||||||||||
code_challenge |
建議
指定編碼的 |
||||||||||||||||
code_challenge_method |
建議
指定用於編碼 |
||||||||||||||||
state |
建議
指定應用程式用來維護授權要求與授權伺服器回應之間狀態的任何字串值。使用者同意或拒絕應用程式的存取要求後,伺服器會傳回您在 這個參數有多種用途,例如將使用者導向應用程式中的正確資源、傳送隨機數,以及防範跨網站要求偽造。由於 |
||||||||||||||||
login_hint |
選填
如果應用程式知道要驗證的使用者是誰,就可以使用這個參數向 Google 驗證伺服器提供提示。伺服器會使用提示簡化登入流程,方法是在登入表單中預先填入電子郵件欄位,或是選取適當的多重登入工作階段。 將參數值設為電子郵件地址或 |
授權網址範例
下方分頁顯示不同重新導向 URI 選項的授權網址範例。
每個網址都會要求存取可檢視使用者 YouTube 帳戶的範圍。網址完全相同,只有 redirect_uri
參數的值不同。網址也包含必要參數 response_type
和 client_id
,以及選用參數 state
。每個網址都包含換行符號和空格,方便閱讀。
自訂 URI 配置
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.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%2Fyoutube.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 帳戶無法授權一或多個要求範圍。如要進一步瞭解管理員如何限制所有範圍或機密和受限範圍的存取權,直到明確授予 OAuth 用戶端 ID 存取權為止,請參閱 Google Workspace 管理員說明文章「 控管哪些第三方應用程式和內部應用程式可存取 Google Workspace 資料」。
disallowed_useragent
授權端點顯示在 Google 的 OAuth 2.0 政策禁止使用的內嵌使用者代理程式中。
Android
Android 開發人員在 android.webkit.WebView
中開啟授權要求時,可能會看到這則錯誤訊息。開發人員應改用 Android 程式庫,例如 Google Sign-In for Android 或 OpenID Foundation 的 AppAuth for Android。
如果 Android 應用程式在內嵌使用者代理程式中開啟一般網頁連結,且使用者從您的網站前往 Google 的 OAuth 2.0 授權端點,網頁開發人員可能會遇到這個錯誤。開發人員應允許一般連結在作業系統的預設連結處理常式中開啟,包括 Android 應用程式連結處理常式或預設瀏覽器應用程式。Android 自訂分頁程式庫也是支援的選項。
iOS
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 不符。在
中,查看已授權的重新導向 URI。
傳遞的 redirect_uri
可能不適用於用戶端類型。
「redirect_uri
」參數可能參照已淘汰且不再支援的 OAuth 頻外 (OOB) 流程。請參閱遷移指南,更新整合項目。
invalid_request
您提出的要求有誤。可能原因如下:
- 要求格式有誤
- 要求缺少必要參數
- 要求使用的授權方法不受 Google 支援。確認 OAuth 整合功能使用建議的整合方法
- 重新導向 URI 使用自訂配置:如果看到「Chrome 應用程式不支援自訂 URI 配置」 或「Android 用戶端未啟用自訂 URI 配置」 錯誤訊息,表示您使用的自訂 URI 配置不支援 Chrome 應用程式,且預設會在 Android 上停用。進一步瞭解自訂 URI 配置替代方案
步驟 4:處理 OAuth 2.0 伺服器回應
應用程式接收授權回應的方式取決於使用的重新導向 URI 配置。無論採用哪種配置,回應都會包含授權碼 (code
) 或錯誤 (error
)。舉例來說,error=access_denied
表示使用者拒絕要求。
如果使用者授予應用程式存取權,您就可以按照下一個步驟的說明,將授權碼換成存取權杖和更新權杖。
步驟 5:以授權碼換取更新和存取權杖
如要將授權碼換成存取權杖,請呼叫 https://oauth2.googleapis.com/token
端點並設定下列參數:
欄位 | |
---|---|
client_id |
從 取得的用戶端 ID。 |
client_secret |
從 取得的用戶端密鑰。 |
code |
初始要求傳回的授權碼。 |
code_verifier |
您在步驟 1 中建立的驗證碼。 |
grant_type |
如 OAuth 2.0 規格所述,這個欄位的值必須設為 authorization_code 。 |
redirect_uri |
專案在
中列出的其中一個重新導向 URI。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& client_secret=your_client_secret& 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/youtube.force-ssl", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
步驟 6:檢查使用者授予的範圍
要求多項權限 (範圍) 時,使用者可能不會授予應用程式所有權限。應用程式必須驗證實際授予的範圍,並妥善處理部分權限遭拒的情況,通常是停用依賴這些遭拒範圍的功能。
但也有例外情況。如果 Google Workspace Enterprise 應用程式已啟用網域範圍的授權委派,或是標示為信任,系統就會略過詳細權限同意畫面。這類應用程式不會顯示適當的權限同意畫面。應用程式會收到所有要求的範圍,或完全沒有。
詳情請參閱「如何處理精細權限」。
如要檢查使用者是否已授予應用程式特定範圍的存取權,請檢查存取權杖回應中的 scope
欄位。存取權範圍 (以空格分隔的字串清單表示,且區分大小寫)。
舉例來說,下列存取權杖回應範例指出,使用者已授予應用程式權限,可查看、編輯及永久刪除使用者的 YouTube 影片、評分、留言和字幕:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/youtube.force-ssl", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
呼叫 Google API
應用程式取得存取權杖後,如果 API 要求的存取範圍已獲授權,您就可以使用權杖代表特定使用者帳戶呼叫 Google API。如要這麼做,請在 API 要求中加入存取權杖,方法是加入 access_token
查詢參數或 Authorization
HTTP 標頭 Bearer
值。如果可以,請盡量使用 HTTP 標頭,因為查詢字串通常會顯示在伺服器記錄中。在大多數情況下,您可以使用用戶端程式庫設定對 Google API 的呼叫 (例如呼叫 YouTube Data API 時)。
請注意,YouTube Data API 僅支援服務帳戶,適用於擁有及管理多個 YouTube 頻道的 YouTube 內容擁有者,例如唱片公司和電影製片廠。
您可以在 OAuth 2.0 Playground 試用所有 Google API,並查看其範圍。
HTTP GET 範例
使用 Authorization: Bearer
HTTP 標頭呼叫
youtube.channels
端點 (YouTube Data API) 時,可能如下所示。請注意,您必須指定自己的存取權杖:
GET /youtube/v3/channels?part=snippet&mine=true HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
以下是使用 access_token
查詢字串參數,對經過驗證的使用者呼叫相同 API 的範例:
GET https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true
curl
範例
您可以使用 curl
指令列應用程式測試這些指令。以下是使用 HTTP 標頭選項的範例 (建議採用):
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true
或者,您也可以使用查詢字串參數選項:
curl https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true
重新整理存取權杖
存取權杖會定期過期,並成為相關 API 要求的無效憑證。如果您要求存取與權杖相關聯的範圍,即可重新整理存取權杖,不必提示使用者授予權限 (包括使用者不在時)。
如要重新整理存取權杖,應用程式會將 HTTPS POST
要求傳送至 Google 的授權伺服器 (https://oauth2.googleapis.com/token
),其中包含下列參數:
欄位 | |
---|---|
client_id |
從 API Console取得的用戶端 ID。 |
client_secret |
從 API Console取得的用戶端密鑰。
(如果用戶端註冊為 Android、iOS 或 Chrome 應用程式,則不適用 client_secret )。
|
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& client_secret=your_client_secret& 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", "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 配置 (Android、iOS、UWP)
自訂 URI 配置是一種深層連結,可使用自訂配置開啟應用程式。
Android 上的自訂 URI 配置替代方案
使用建議的替代方案,將 OAuth 2.0 回應直接傳送至應用程式,無須重新導向 URI。
如何遷移至 Google Identity 服務 Android 程式庫
如果您在 Android 上為 OAuth 整合項目使用自訂架構,則需要完成下列動作,才能完全遷移至使用建議的 Google Identity Services Android 程式庫:
- 更新程式碼,使用 Google Identity 服務 Android 程式庫。
- 在 Google Cloud 控制台中停用自訂配置支援。
下列步驟詳細說明如何遷移至 Google Identity Services Android 程式庫:
-
更新程式碼,使用 Google Identity 服務 Android 程式庫:
-
檢查程式碼,找出向 Google OAuth 2.0 伺服器傳送要求的位置;如果使用自訂結構,要求會如下所示:
https://accounts.google.com/o/oauth2/v2/auth? scope=<SCOPES>& response_type=code& &state=<STATE>& redirect_uri=com.example.app:/oauth2redirect& client_id=<CLIENT_ID>
com.example.app:/oauth2redirect
是上述範例中的自訂配置重新導向 URI。如要進一步瞭解自訂 URI 配置值的格式,請參閱redirect_uri
參數定義。 -
請記下
scope
和client_id
請求參數,您需要設定 Google 登入 SDK。 -
請按照「
授權存取 Google 使用者資料 」一文中的指示設定 SDK。您可以略過「設定 Google Cloud 控制台專案」 步驟,因為您會重複使用從上一個步驟擷取的
client_id
。 -
請按照「
要求使用者動作所需的權限」一文中的操作說明,當中應包含下列步驟:
- 要求使用者授予權限。
-
使用
getServerAuthCode
方法,擷取您要求權限的範圍授權碼。 - 將驗證碼傳送至應用程式後端,以交換存取和更新權杖。
- 使用擷取的存取權杖,代表使用者呼叫 Google API。
-
檢查程式碼,找出向 Google OAuth 2.0 伺服器傳送要求的位置;如果使用自訂結構,要求會如下所示:
-
在 Google API 控制台中停用自訂配置支援:
- 前往 OAuth 2.0 憑證清單,然後選取 Android 用戶端。
- 前往「Advanced Settings」(進階設定) 部分,取消勾選「Enable Custom URI Scheme」(啟用自訂 URI 配置) 核取方塊,然後按一下「Save」(儲存),即可停用自訂 URI 配置支援功能。
啟用自訂 URI 配置
如果建議的替代方案不適用,請按照下列操作說明,為 Android 用戶端啟用自訂 URI 配置:- 前往 OAuth 2.0 憑證清單,然後選取 Android 用戶端。
- 前往「進階設定」部分,勾選「啟用自訂 URI 配置」核取方塊,然後按一下「儲存」,啟用自訂 URI 配置支援功能。
Chrome 應用程式自訂 URI 配置的替代方案
使用 Chrome Identity API,將 OAuth 2.0 回應直接傳送至應用程式,無須重新導向 URI。
迴路 IP 位址 (macOS、Linux、Windows 電腦)
如要透過這個網址接收授權碼,應用程式必須監聽本機網路伺服器。許多平台都支援這項功能,但並非所有平台皆是如此。不過,如果平台支援這項機制,建議您使用這種方式取得授權碼。
應用程式收到授權回應時,為提供最佳使用體驗,應顯示 HTML 網頁,指示使用者關閉瀏覽器並返回應用程式。
建議用法 | macOS、Linux 和 Windows 電腦 (但不包括通用 Windows 平台) 應用程式 |
表單值 | 將應用程式類型設為「電腦版應用程式」。 |
手動複製/貼上 (已淘汰)
保護應用程式
驗證應用程式擁有權 (Android、Chrome)
您可以驗證應用程式擁有權,降低應用程式遭冒用的風險。
Android
如要完成驗證程序,請使用 Google Play 開發人員帳戶 (如有),並在 Google Play 管理中心註冊應用程式。如要順利完成驗證,請務必符合下列規定:
- 您必須在 Google Play 管理中心註冊應用程式,且該應用程式的套件名稱和 SHA-1 簽署憑證指紋,必須與您要完成驗證的 Android OAuth 用戶端相同。
- 您必須具備 Google Play 管理中心中該應用程式的管理員權限。 進一步瞭解 Google Play 管理中心的存取權管理。
在 Android 用戶端的「驗證應用程式擁有權」部分,按一下「驗證擁有權」按鈕,完成驗證程序。
如果驗證成功,系統會顯示通知,確認驗證程序順利完成。否則系統會顯示錯誤提示。
如要修正驗證失敗的問題,請嘗試下列方法:
- 確認您要驗證的應用程式已在 Google Play 管理中心註冊。
- 請確認您在 Google Play 管理中心具備該應用程式的管理員權限。
Chrome
如要完成驗證程序,請使用 Chrome 線上應用程式商店開發人員帳戶。 如要順利完成驗證,請務必符合下列規定:
- 您必須在 Chrome 線上應用程式商店開發人員資訊主頁中註冊項目,且該項目的 ID 與您要驗證的 Chrome 擴充功能 OAuth 用戶端 ID 相同。
- 你必須是 Chrome 線上應用程式商店項目的發布者。 進一步瞭解 Chrome 線上應用程式商店開發人員資訊主頁的存取權管理功能。
在 Chrome 擴充功能用戶端的「驗證應用程式擁有權」部分,按一下「驗證擁有權」按鈕,完成驗證程序。
注意:授予帳戶存取權後,請稍候片刻再完成驗證程序。
如果驗證成功,系統會顯示通知,確認驗證程序順利完成。否則系統會顯示錯誤提示。
如要修正驗證失敗的問題,請嘗試下列方法:
應用程式檢查 (僅限 iOS)
App Check 功能會使用 Apple 的 App Attest 服務,驗證對 Google OAuth 2.0 端點提出的要求是否來自正版應用程式,防止未經授權的使用者存取 iOS 應用程式。這有助於降低應用程式遭冒用的風險。
為 iOS 用戶端啟用 App Check
如要為 iOS 用戶端順利啟用 App Check,必須符合下列規定:- 您必須為 iOS 用戶端指定團隊 ID。
- 軟體包 ID 不得使用萬用字元,因為這可能會解析為多個應用程式。也就是說,軟體包 ID 不得包含星號 (*) 符號。
啟用 App Check 後,您會在 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 權杖的要求,可能來自模擬環境,或是試圖冒用您應用程式的偽造用戶端。
如要強制執行 App Check,請按一下「強制執行」按鈕,然後確認您的選擇。強制執行後,系統會拒絕來自用戶端的所有未經驗證要求。
注意:啟用強制執行後,變更最多可能需要 15 分鐘才會生效。
取消強制執行 iOS 用戶端的 App Check
取消強制執行應用程式的 App Check 後,系統會停止強制執行,並允許用戶端將所有要求 (包括未經驗證的要求) 傳送至 Google OAuth 2.0 端點。
如要對 iOS 用戶端取消強制執行 App Check,請前往 iOS 用戶端的編輯檢視畫面,然後按一下「取消強制執行」按鈕並確認選擇。
注意:取消強制執行 App Check 後,變更最多可能需要 15 分鐘才會生效。
停用 iOS 用戶端的 App Check
為應用程式停用 App Check 後,系統會停止所有 App Check 監控和強制執行作業。請考慮不強制執行 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
如要進一步瞭解如何實作跨帳戶保護機制,以及查看可用事件的完整清單,請參閱「 透過跨帳戶保護機制保護使用者帳戶 」頁面。