如何设置OAuth(针对Azure AD)以执行来自Google动作的履行请求?

时间:2018-09-22 16:32:16

标签: azure-active-directory actions-on-google google-home

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

问题是当操作实现通过Webhook进行呼叫时,我没有在服务中收到访问令牌。它应该位于User对象内部的请求正文中。因此,我总是收到401的回复。

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

我将如何实现?我已将Account Linking配置为使用服务的密码和appId等使用OAuth。在Azure方面,此设置是正确的,因为我可以使用Postman来检索有效令牌,例如。

1 个答案:

答案 0 :(得分:2)

听起来您要在此处尝试两种不同的身份验证:

  1. 您要确保对Webhook的呼叫来自Google上的Actions。

  2. 您想知道正在调用您的Action的用户是谁。

正如您所指出的,通过将auth令牌作为请求主体的一部分来处理(2)。您应该在调用webhook后进行身份验证,这就是为什么不将其作为Authentication标头的一部分提供的原因。这是助手在执行帐户链接时所执行的操作-如果您不需要执行此操作,则不需要为操作启用帐户链接。

(1)的处理方式有所不同,具体取决于您如何构建Action。如果您使用的是Action SDK,则会在标头中发送JWT Token,您应验证标头是否适合您的项目并由Google签名。如果您使用的是Dialogflow,则可以configure the fulfillment发送标头或基本身份验证,您可以在Webhook上进行验证。

在调用执行服务器时,Action SDK和Dialogflow都不支持OAuth 2.0 / OpenID Connect标头(我不确定为什么会这样,但是我推测这会增加很多复杂性,而对安全性的影响却很小)。如果您在处理(1)时不支持这两种方案,那么您将需要设置一个可以执行以下操作的代理:

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