授權錯誤

授權程序期間,Google OAuth 可能會傳回錯誤。請參閱本指南,排解此程序中最常見的錯誤。

疑難排解

如要進一步瞭解 Google OAuth,請參閱「使用 OAuth 2.0 存取 Google API」。

更新權杖持續過期

如果用戶端 ID 未獲核准,更新權杖可能會在 7 天後失效。7 天的權杖效期與商業或沙箱核准無關。服務或使用者帳戶必須取得 OAuth 2.0 用戶端 ID 核准,並投入實際運作,才能延長權杖效期。詳情請參閱「更新權杖效期」。

存取遭拒

如果您已在 Google Cloud 中設定 OAuth 同意畫面,且「使用者類型」為「外部」,當您嘗試連結未列為應用程式測試使用者的 Google 帳戶時,會收到「存取遭拒」錯誤訊息。請務必在 OAuth 同意畫面的「測試使用者」部分新增 Google 帳戶。

合作夥伴連線管理工具 (PCM) 錯誤

如要瞭解如何解決存取 PCM 時發生的錯誤,請參閱「合作夥伴連線管理工具 (PCM) 錯誤參考資料」。

這個應用程式未經 Google 驗證

SDM API 使用受限範圍,因此除非完成 OAuth API 驗證,否則在授權期間使用這個範圍的應用程式都會「未經驗證」。如果僅供個人使用,則不需要完成 OAuth API 驗證。 Device Access

授權程序期間,您可能會看到「Google 尚未驗證這個應用程式」畫面。如果 Google Cloud 的 OAuth 同意畫面未設定 sdm.service 範圍,就會顯示這個畫面。如要略過這個畫面,請按一下「進階」選項,然後按一下「前往『專案名稱』(不安全)」

詳情請參閱「未驗證的應用程式畫面」。

用戶端無效

嘗試取得存取或更新權杖時,如果提供的 OAuth 2.0 用戶端密鑰不正確,系統會顯示「無效的用戶端」錯誤。請確認您在存取和更新權杖呼叫中使用的 client_secret 值,是您在 Google Cloud 憑證頁面中找到的 OAuth 2.0 用戶端 ID 值。

要求無效,缺少必要範圍

在 PCM 中授予權限後,您可能會遇到「無效要求」錯誤,顯示「缺少必要參數:範圍」。請確認您在授權呼叫中使用的 scope 值,與您為 OAuth 2.0 用戶端設定的值相同,如 Google Cloud 憑證頁面所示。

重新導向 URI 不符

進行授權時,您可能會遇到「重新導向 URI 不符」錯誤。請確認您在授權呼叫中使用的 redirect_uri 值,與您為 OAuth 2.0 用戶端設定的值相同,如Google Cloud 憑證頁面所示。

快速參考指引

請參閱這份參考資料,快速實作授權user 並連結 Google 帳戶的步驟。

如要使用這份快速參考資料,請在程式碼範例中編輯每個預留位置變數,並填入特定整合的值,然後視需要複製及貼上:

1 PCM

將 user 導向應用程式中的 PCM 連結,並取代:

  1. project-id 換成您的 Device Access Project ID
  2. oauth2-client-id 改成您Google Cloud 憑證中的 OAuth2 用戶端 ID
  3. redirect-uri,並為您使用的 OAuth2 用戶端 ID 指定重新導向 URI
  4. scope,並使用其中一個可用範圍
https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=redirect-uri&access_type=offline&prompt=consent&client_id=oauth2-client-id&response_type=code&scope=https://www.googleapis.com/auth/scope

2 驗證碼

透過 PCM 授予所選範圍的權限後, user 應會重新導向至您指定的重新導向 URI。授權碼會以網址中的 code 參數形式傳回,格式如下:

redirect-uri?code=authorization-code&scope=https://www.googleapis.com/auth/scope

3 存取權杖

使用授權碼擷取存取權杖,代表使用者呼叫 SDM API。

向 Google 的 OAuth 端點發出 POST 呼叫,並取代下列項目:

  1. oauth2-client-idoauth2-client-secret ,並使用 Google Cloud 憑證中的 OAuth2 用戶端 ID 和用戶端密鑰
  2. authorization-code 改成您在上個步驟收到的代碼
  3. redirect-uri,並為您使用的 OAuth2 用戶端 ID 指定重新導向 URI

Google OAuth 會傳回兩個權杖:存取權杖和更新權杖。

要求

curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=redirect-uri'

回應

{
  "access_token": "access-token",
  "expires_in": 3599,
  "refresh_token": "refresh-token",
  "scope": "https://www.googleapis.com/auth/scope",
  "token_type": "Bearer"
}

4 API 呼叫

您必須使用 user的存取權杖發出 API 呼叫,才能完成授權。這項初始呼叫會完成授權程序,並啟用事件。

必須使用指定範圍列出的其中一個 API 呼叫,才能完成授權。

sdm.service

裝置

詳情請參閱 devices.list API 參考資料。

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

5 更新權杖

如 Google OAuth 傳回的 expires_in 參數所述,SDM API 的存取憑證效期只有 1 小時。如果存取權杖過期,請使用更新權杖取得新的存取權杖。

向 Google 的 OAuth 端點發出 POST 呼叫,並取代下列項目:

  1. oauth2-client-idoauth2-client-secret ,並使用 Google Cloud 憑證中的 OAuth2 用戶端 ID 和用戶端密鑰
  2. refresh-token,並使用您在取得存取權杖時收到的代碼。

Google OAuth 會傳回新的存取權杖。

要求

curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&refresh_token=refresh-token&grant_type=refresh_token'

回應

{
  "access_token": "new-access-token",
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/scope",
  "token_type": "Bearer"
}