授權

Developer可以使用 SDM API 代表 user查看及管理 Google Nest 裝置。SDM API 會驗證 user 管理要存取的裝置、 user 已同意developer 讀取或寫入每部裝置特徵,以及developer 已加入許可清單,可存取每種特性。

如要使用 SDM API 管理裝置,developer 必須先獲得 user授權。

如需授權程序的逐步操作說明,請參閱 Device Access 快速入門指南的「授權帳戶」頁面。

如需授權錯誤疑難排解的相關說明,請參閱授權錯誤

OAuth 流程

SDM API 採用三足 Google OAuth 流程進行user 授權:

  • 當 a user 同意授權 a developer 管理 Nest 裝置時, developer 會將user 傳送至 PCM,也就是 user登入 Google 帳戶。
  • user 會選取要在 PCM 中授予 developer的權限。
  • user 透過 OAuth 提供授權,藉此授予developer 授權碼。
  • developer 會使用授權碼擷取存取權杖。
  • developer 會將存取權杖與呼叫 SDM API 搭配使用以管理裝置。

如要進一步瞭解 Google OAuth 及設定方式,請參閱使用 OAuth 2.0 存取 Google API

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

PCM 是由 SDM API 提供。這個檢視畫面會列出user 可授予 developer的所有結構、裝置和存取選項。 user會選擇在授權程序能夠存取哪些項目,並保留相關存取權。

PCM 中選取的選項會對應至特性群組,這些群組會授予 developer 可存取的特性。視developer 提供給 user的整合類型而定,部分特性群組會相互連結,而 user必須授予這些連結群組的相關權限,才能啟用該整合功能。否則,使用者可以視需要為未連結的個別群組授予權限。

啟用 PCM

如要為 user啟用 PCM 檢視畫面,請將標準 Google API OAuth 2.0 端點替換為授權要求的新 OAuth 端點:

https://nestservices.google.com/partnerconnections/project-id/auth

在網址中使用這些參數:

參數 說明
redirect_uri 授權成功後 user 的 URI。
client_id Google Cloud 專案中的 OAuth 2.0 用戶端 ID。請確認此 ID 與你的 Project ID 相關聯。請注意,OAuth 用戶端 ID 有效且不得重複, project不得與其他 project共用。
access_type 要使用的值:offline
prompt 要使用的值:consent
response_type 使用值:code
系統應傳回授權碼。
scope 要使用的值:https://www.googleapis.com/auth/sdm.service
SDM API 範圍。
state 選用。 developer 用戶端使用的不透明值,用於在要求和回呼之間維持狀態。
linking_token GetToken 指令取得的連結權杖。

PCM 網址範例:

https://nestservices.google.com/partnerconnections/
  2f6989ca-c756-4625-8cdc-d5b1edfb2dcd/auth?
  redirect_uri=https://www.example.com/api/link/M258KP8OWYZDVQ&
  client_id=418235700063-sdkiav89orn5r1nvrcr5t210qqjimq8l.apps.googleusercontent.com&
  access_type=offline&
  prompt=consent&
  response_type=code&
  scope=https://www.googleapis.com/auth/sdm.service

user 授予權限後,系統會傳回授權碼,做為重新導向 URI 的 code 參數。使用此代碼以取得存取權杖。

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

在應用程式中新增 PCM

在應用程式中,使用以下網址新增 PCM 檢視畫面:

https://nestservices.google.com/partnerconnections

登入 user 後,這個頁面會顯示所有已連結的Device Access developer,以及所有授予及撤銷權限的切換按鈕和裝置清單。 user 也能根據單一合作夥伴來中斷與合作夥伴的連線。

未經驗證的應用程式

SDM API 使用受限制的範圍,也就是說,除非使用 OAuth API 驗證,否則在授權期間使用這個範圍的應用程式都會「未經驗證」。將 Device Access 用於個人用途時,不需要 OAuth OAuth 驗證。

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

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

存取憑證

所有會呼叫 SDM API 以管理授權結構和裝置時,都必須使用user 在授權期間向 developer 授予的專屬存取權杖。存取權杖是短期的,必須定期重新整理,以確保持續存取。

如果 a user 稍後 developer 撤銷了結構或裝置的存取權,存取權杖會立即失效,且無法重新整理,而且developer 將無法代表該位置呼叫 SDM API user。

撤銷帳戶授權

您可以透過多種方式撤銷 Google 帳戶的授權,建議的做法是使用 Partner Connections Manager (PCM) 修改帳戶權限。詳情請參閱「修改帳戶權限」一文。您也可以透過以下方式撤銷存取權杖:

  1. 使用者可以前往 https://myaccount.google.com/permissions 撤銷存取權。

  2. 開發人員可以將存取權杖傳遞至端點 https://oauth2.googleapis.com/revoke。如要進一步瞭解 Google OAuth 和撤銷權杖,請參閱撤銷權杖

內嵌 WebView

新的安全瀏覽器政策禁止嵌入內嵌瀏覽器程式庫 (通常稱為內嵌 WebView) 中的 Google OAuth 要求。所有嵌入的 WebView 都會遭到封鎖。嵌入式 WebView 程式庫會發生問題,可讓惡意開發人員攔截及變更 Google 與其使用者之間的通訊。內嵌的網頁瀏覽不僅會影響帳戶安全性,也可能會影響應用程式的可用性。

如果您受到這項政策的影響,請參閱「內嵌式 WebView 中 Google OAuth 2.0 授權端點近期安全性異動」支援文章。