首页 > 解决方案 > 如何为来自谷歌操作的履行请求设置 OAuth(针对 Azure AD)?

问题描述

我有一个使用 Azure Active Directory 进行身份验证/授权的 Azure 服务。我正在尝试设置一个 google action 实现(使用 webhook)来访问此服务以获取有关用户的信息。试图Account Linking用于此。

问题是当操作执行通过 webhook 进行调用时,我没有在我的服务中收到访问令牌。它应该在User对象内部的请求正文中。所以我总是得到401回应。

似乎履行期望通过 OAuth 使用登录的谷歌用户帐户对自己进行身份验证(如果我错了,请纠正我)。但是,我希望我的服务使用单个 Azure AD 帐户验证每个履行请求,而不是每个单独的 google 用户帐户。我的 Azure AD 不了解谷歌用户。

我将如何实现这一目标?我已经配置Account Linking为使用我的服务的密钥和 appId 等使用 OAuth。Azure 端的设置是正确的,因为我可以使用 Postman 检索有效的令牌,例如。

标签: azure-active-directoryactions-on-googlegoogle-home

解决方案


听起来您在这里尝试进行两种不同类型的身份验证:

  1. 您要确保对您的 webhook 的调用来自 Actions on Google。

  2. 您想知道调用您的操作的用户是谁。

正如您所指出的,(2)是通过将身份验证令牌作为请求正文的一部分来处理的。一旦您的 webhook 被调用,您就需要对其进行身份验证,这就是为什么它没有作为Authentication标头的一部分提供的原因。这就是助手在进行帐户链接时所做的事情 - 如果您不需要这样做,则不需要为您的操作启用帐户链接。

(1) 的处理方式不同,具体取决于您构建 Action 的方式。如果您使用的是 Action SDK,则会在标头中发送一个JWT 令牌,您应该验证该令牌是否适用于您的项目并由 Google 签名。如果您使用的是 Dialogflow,则可以将履行配置为发送标头或基本身份验证,您可以在 webhook 上进行验证。

调用实现服务器时,Action SDK 和 Dialogflow 都不支持 OAuth 2.0 / OpenID Connect 标头(我不知道为什么,但我的猜测是它增加了很多复杂性,但安全性非常低)。如果您在处理 (1) 时不能支持这两种方案中的任何一种,那么您将需要设置一个可以执行以下操作的代理:

  1. 获取身份验证信息(来自 Action SDK 的 JWT 或来自 Dialogflow 的静态标头信息)
  2. 验证它是否有效
  3. 针对您的 AD 获取当前有效的令牌
  4. 使用令牌重新向您的 AD 保护资源发出命令。

推荐阅读