我有一个使用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来检索有效令牌,例如。
答案 0 :(得分:2)
听起来您要在此处尝试两种不同的身份验证:
您要确保对Webhook的呼叫来自Google上的Actions。
您想知道正在调用您的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)时不支持这两种方案,那么您将需要设置一个可以执行以下操作的代理: