如何为来自 google 操作的履行请求设置 OAuth(针对 Azure AD)?
How to setup OAuth (against Azure AD) for fulfillment requests from google actions?
我有一项使用 Azure Active Directory 的 Azure 服务 authentication/authorization。我正在尝试设置 google 操作实现(使用网络钩子)来访问此服务以获取有关用户的信息。为此尝试使用 Account Linking
。
问题是当操作执行通过 webhook 进行调用时,我没有在我的服务中收到访问令牌。它应该在 User
对象内的请求正文中。所以我总是收到 401
回复。
似乎履行期望通过 OAuth 使用已登录的 google 用户帐户对自己进行身份验证(如果我错了请纠正我)。但是,我希望我的服务使用单个 Azure AD 帐户而不是每个单独的 google 用户帐户来验证每个履行请求。我的 Azure AD 不了解 google 个用户。
我将如何实现这一目标?我已将 Account Linking
配置为使用我的服务的秘密和 appId 等来使用 OAuth。Azure 端的设置是正确的,因为我可以使用 Postman 检索有效令牌,例如。
听起来您正在尝试进行两种不同类型的身份验证:
您要确保对您的 webhook 的调用来自 Google 上的操作。
您想知道调用您的操作的用户是谁。
如您所述,(2) 是通过将身份验证令牌作为请求的 body 的一部分来处理的。一旦您的 webhook 被调用,您就需要对其进行身份验证,这就是为什么它不作为 Authentication
header 的一部分提供的原因。这就是智能助理在进行帐户链接时所做的事情 - 如果您不需要这样做,则不需要为您的操作启用帐户链接。
(1) 的处理方式不同,具体取决于您构建 Action 的方式。如果您使用的是 Action SDK,则 JWT Token will be sent in the header which you should verify as being for your project and signed by Google. If you are using Dialogflow, you can configure the fulfillment 发送 header 或您可以在网络钩子上验证的基本身份验证。
调用执行服务器时,Action SDK 和 Dialogflow 都不支持 OAuth 2.0 / OpenID Connect header(我不确定为什么,但我的猜测是它增加了很多复杂性以获得非常小的安全利益)。如果您在处理 (1) 时不能支持这两种方案中的任何一种,那么您将需要设置一个可以执行以下操作的代理:
- 获取身份验证信息(来自 Action SDK 的 JWT 或来自 Dialogflow 的静态 header 信息)
- 验证它是否有效
- 获取针对您的 AD 的当前有效令牌
- Re-issue 使用令牌对您的 AD 保护资源的命令。
我有一项使用 Azure Active Directory 的 Azure 服务 authentication/authorization。我正在尝试设置 google 操作实现(使用网络钩子)来访问此服务以获取有关用户的信息。为此尝试使用 Account Linking
。
问题是当操作执行通过 webhook 进行调用时,我没有在我的服务中收到访问令牌。它应该在 User
对象内的请求正文中。所以我总是收到 401
回复。
似乎履行期望通过 OAuth 使用已登录的 google 用户帐户对自己进行身份验证(如果我错了请纠正我)。但是,我希望我的服务使用单个 Azure AD 帐户而不是每个单独的 google 用户帐户来验证每个履行请求。我的 Azure AD 不了解 google 个用户。
我将如何实现这一目标?我已将 Account Linking
配置为使用我的服务的秘密和 appId 等来使用 OAuth。Azure 端的设置是正确的,因为我可以使用 Postman 检索有效令牌,例如。
听起来您正在尝试进行两种不同类型的身份验证:
您要确保对您的 webhook 的调用来自 Google 上的操作。
您想知道调用您的操作的用户是谁。
如您所述,(2) 是通过将身份验证令牌作为请求的 body 的一部分来处理的。一旦您的 webhook 被调用,您就需要对其进行身份验证,这就是为什么它不作为 Authentication
header 的一部分提供的原因。这就是智能助理在进行帐户链接时所做的事情 - 如果您不需要这样做,则不需要为您的操作启用帐户链接。
(1) 的处理方式不同,具体取决于您构建 Action 的方式。如果您使用的是 Action SDK,则 JWT Token will be sent in the header which you should verify as being for your project and signed by Google. If you are using Dialogflow, you can configure the fulfillment 发送 header 或您可以在网络钩子上验证的基本身份验证。
调用执行服务器时,Action SDK 和 Dialogflow 都不支持 OAuth 2.0 / OpenID Connect header(我不确定为什么,但我的猜测是它增加了很多复杂性以获得非常小的安全利益)。如果您在处理 (1) 时不能支持这两种方案中的任何一种,那么您将需要设置一个可以执行以下操作的代理:
- 获取身份验证信息(来自 Action SDK 的 JWT 或来自 Dialogflow 的静态 header 信息)
- 验证它是否有效
- 获取针对您的 AD 的当前有效令牌
- Re-issue 使用令牌对您的 AD 保护资源的命令。