授权

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。请确保它与您的 Project ID 相同。 请注意,OAuth 客户端 ID 必须有效且对 project而言是唯一的,并且不能与其他 project共享。
access_type 要使用的值:offline
prompt 要使用的值:consent
response_type 要使用的值:code
授权代码应作为回报。
scope 要使用的值:https://www.googleapis.com/auth/sdm.service
SMM 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 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

一项新的安全浏览器政策禁止在嵌入式浏览器库中使用 Google OAuth 请求(通常称为嵌入式 WebView)。所有嵌入式 WebView 都将被屏蔽。嵌入式 WebView 库可能会造成不良开发者,截获并更改 Google 与其用户之间的通信,因此会带来问题。嵌入式 WebView 不仅会影响帐号安全,还可能会影响应用的易用性。

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