授权

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 中选择的选项会映射到 trait 组,这些 trait 组是指 developer 将获得访问权限的 trait 集合。某些 trait 组会相互关联,具体取决于developer 向 user提供的集成类型,并且 user必须向这些关联的 trait 组授予权限,才能实现该集成。否则,用户可以根据需要为各个未关联的特征组授予权限。

启用 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
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

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

如需有关访问 PCM 时遇到的任何错误的帮助,请参阅 Partner Connections Manager (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 调用都必须使用user 在授权期间向 developer 授予的唯一访问令牌。访问令牌是短期有效的,必须定期刷新才能确保持续访问。

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

撤消账号授权

您可以通过多种方式撤消 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 授权端点即将发生的安全变更支持文章。