azure-active-directory - 如何为来自谷歌操作的履行请求设置 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 检索有效的令牌,例如。
解决方案
听起来您在这里尝试进行两种不同类型的身份验证:
您要确保对您的 webhook 的调用来自 Actions on Google。
您想知道调用您的操作的用户是谁。
正如您所指出的,(2)是通过将身份验证令牌作为请求正文的一部分来处理的。一旦您的 webhook 被调用,您就需要对其进行身份验证,这就是为什么它没有作为Authentication
标头的一部分提供的原因。这就是助手在进行帐户链接时所做的事情 - 如果您不需要这样做,则不需要为您的操作启用帐户链接。
(1) 的处理方式不同,具体取决于您构建 Action 的方式。如果您使用的是 Action SDK,则会在标头中发送一个JWT 令牌,您应该验证该令牌是否适用于您的项目并由 Google 签名。如果您使用的是 Dialogflow,则可以将履行配置为发送标头或基本身份验证,您可以在 webhook 上进行验证。
调用实现服务器时,Action SDK 和 Dialogflow 都不支持 OAuth 2.0 / OpenID Connect 标头(我不知道为什么,但我的猜测是它增加了很多复杂性,但安全性非常低)。如果您在处理 (1) 时不能支持这两种方案中的任何一种,那么您将需要设置一个可以执行以下操作的代理:
- 获取身份验证信息(来自 Action SDK 的 JWT 或来自 Dialogflow 的静态标头信息)
- 验证它是否有效
- 针对您的 AD 获取当前有效的令牌
- 使用令牌重新向您的 AD 保护资源发出命令。
推荐阅读
- javascript - React Native AXIOS 方法 GET response.data 显示 null
- azure - 自动生成的 Azure can-shell-storage 帐户
- amazon-web-services - 什么是正确的 AWS::Glue::Job Connections 属性结构?
- c++ - 【MacOSX 10.15.1】使用odb生成数据库,致命错误:wchar.h: No such file or directory #include
- flutter - 在小部件测试期间检查颜色?
- android - awsmobileclient 中的无密码自定义身份验证流程
- ruby-on-rails - 在多台服务器上运行的 Rails 应用程序中,如何确保 rake 任务只运行一次?
- javascript - dyld:库未加载:/usr/local/opt/icu4c/lib/libicui18n.63.dylib 引用自:/usr/local/opt/node@8/bin/node
- c# - 如何在 c# 中设置两个显示和隐藏表单的键绑定?
- python - 在 Django 模板中显示文本文件的内容