授权

Developer可以代表 user使用 SDM API 查看和 管理 Google Nest 设备。SDM API 会验证是否管理着要访问的 设备,是否已同意 developer 读取或写入每个设备的特征,以及是否已列入白名单以访问每个特征。 user user developer

如需使用 SDM API 进行设备管理, developer 必须先获得的授权 user。

如需了解授权流程,请参阅授权 账号页面,该页面位于 Device Access 快速入门指南中。

如需获得有关排查授权错误的帮助,请参阅Authorization Errors

OAuth 流程

SDM API 使用三方模式的 Google OAuth 流程进行 user 授权:

  • 当 a user 希望授权 a developer 管理 Nest 设备时, developer 会将 user 发送给 PCM,并在 PCM 中 user 登录其 Google 账号。
  • 在 PCM 中,选择要授予的权限。 user developer
  • 通过 OAuth 提供同意,向 developer 授予授权代码。 user
  • 使用授权代码检索访问 令牌。 developer
  • 使用访问令牌调用 SDM API 进行设备管理。 developer

如需详细了解 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 成功授权后将重定向到的 URI。 user
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

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

在授予权限后,系统会在重定向 URI 中以 code 参数的形式返回授权代码。 user 使用此代码获取访问令牌。

如需获得有关访问 PCM 时遇到的任何错误的帮助,请参阅 合作伙伴连接管理工具 (PCM) 错误参考

将 PCM 添加到您的应用

在您的应用中,使用以下网址添加 PCM 视图:

https://nestservices.google.com/partnerconnections

登录后,此页面会显示其所有关联的 Device Access developer,以及所有结构和设备的列表 ,其中包含用于授予和撤消权限的切换开关。 user 还可以从此页面按合作伙伴断开合作伙伴连接。 user

未经验证的应用

SDM API 使用受限范围,这意味着,除非完成OAuth API 验证,否则在授权期间使用此范围的任何 应用都将“未经验证”。如果将用于 Device Access 个人用途,则无需进行 OAuth API 验证。

在授权过程中,您可能会看到“Google 尚未验证此应用”屏幕,如果未在 Google Cloud 的OAuth 权限请求页面上配置 sdm.service 范围,则会显示此屏幕。您可以依次点击高级 选项和前往 项目 名称(不安全) 来绕过此屏幕。

如需了解详情,请参阅未经验证的应用 屏幕

访问令牌

所有对 SDM API 的调用(用于管理授权的结构和 设备)都必须使用在授权期间授予的唯一访问令牌。 developer user 访问令牌的有效期很短,必须定期刷新以确保持续访问。

如果 a user 稍后撤消 developer 对某个结构或 设备的访问权限,则访问令牌会立即过期且无法刷新,并且 developer 将无法再代表调用 SDM API 。 user

撤消账号授权

您可以通过多种方式取消 Google 账号的授权。首选方法是让用户使用合作伙伴连接管理工具 (PCM) 修改账号权限。如需了解详情,请参阅 修改账号权限 。您还可以通过以下方法撤消访问令牌:

  1. 用户可以在 https://myaccount.google.com/permissions撤消。

  2. 开发者可以将访问令牌传递给端点 https://oauth2.googleapis.com/revoke。如需详细了解 Google OAuth 和令牌撤消,请参阅 撤消令牌

嵌入式 WebView

一项新的安全浏览器政策禁止在嵌入式浏览器库(通常称为嵌入式 WebView)中使用 Google OAuth 请求。所有嵌入式 WebView 都将被屏蔽。 嵌入式 WebView 库存在问题,因为它们允许恶意开发者拦截和更改 Google 与用户之间的通信。嵌入式 WebView 不仅会影响账号安全,还可能会影响应用的易用性。

如果您受到此政策的影响,请参阅 嵌入式 WebView 中即将对 Google OAuth 2.0 授权端点进行的安全变更 支持文章。