Gmail 上下文小工具(Gmail 插件/扩展):已弃用?不可能的?如何? (无法执行 OAuth 2.0)

2024-05-15

我们需要开发一个内部 gmail 扩展来处理传入的电子邮件,允许收件人与我们的内部软件进行交互。我一直试图弄清楚如何在 Gmail Contextual Gadget 中使用 OAuth 2.0,但我找不到任何具体的文档。当我使用 contextual + google-oauth (Google 推荐的关键字)搜索 stack Overflow 时,我找不到任何有用的东西。

在给我标准页面之前,请确保它具有以下内容:

  • 至少是使用 OAuth 2.0 的 Gmail 上下文小工具 manifest.xml 的示例
  • 理想情况下,解释如何在域(而不是市场)上部署它,这样我就知道它实际上已经部署和测试了。

例如,Contextual Gadgets 页面中的标准 hello 示例使用 OpenID (“openIdRealm”),并且是在 OAuth 2.0 之前编写的:

https://developers.google.com/gmail/contextual_gadgets https://developers.google.com/gmail/contextual_gadgets

OAuth 2.0 中不允许使用 OpenID:

https://developers.google.com/apps-marketplace/practices#3_use_oauth20 https://developers.google.com/apps-marketplace/practices#3_use_oauth20

您的应用程序不得使用 OpenID 或 OAuth1.0。任何此类使用的证据都将导致您的申请无法通过审核流程。

请注意,上下文小工具是客户端 Javascript 应用程序,与 Web 服务器应用程序和已安装的应用程序非常不同。所以 OAuth 2.0 应该这样使用:

https://developers.google.com/accounts/docs/OAuth2#clientside https://developers.google.com/accounts/docs/OAuth2#clientside https://developers.google.com/accounts/docs/OAuth2UserAgent https://developers.google.com/accounts/docs/OAuth2UserAgent

但是上下文小工具在容器中运行,该容器处理 OAuth 的第一次调用(google 调用,它使用令牌回调我们的网站......)。生活在客户端,上下文小工具“无法保守秘密”。我们的网站(重定向页面,https://example.com/oauth2callback https://example.com/oauth2callback)需要将访问令牌(可能还有刷新令牌)保存到客户端的小工具代码可以访问的会话中。

理想情况下,我不会使用 SSO,我认为这只是“部署在市场上的应用程序所需要的”。另一种部署是“针对您的域”,它使用Google Apps 扩展控制台:

https://developers.google.com/google-apps/extensions-console/ https://developers.google.com/google-apps/extensions-console/

但扩展控制台在顶部显示“我们正在改善用户体验,请尝试新的开发人员控制台”,该控制台链接到:

https://console.developers.google.com/?redirected=true https://console.developers.google.com/?redirected=true

开发者控制台:

  • 它显示了之前在应用程序扩展控制台中创建的项目。我可以点击它打开一个大菜单(旁边,在左边)
  • API 和身份验证/凭据——我为我的应用程序创建了客户端 ID 和密钥。显然,我必须使用网络应用程序,而不是服务帐户或安装的应用程序,因为我正在尝试访问一些用户私有数据(电子邮件访问),而不仅仅是 Google 服务,而且我不是独立安装的应用程序。

上下文小工具中的任何位置都没有地方可以报告此客户端 ID。是注册后忘记的吗?

另外(一个错误?),即使我没有创建服务帐户凭据,权限也会在“服务帐户”下显示我的客户端 ID。

然后是这样的:我不知道如何从这个新的开发人员控制台在我的域上部署我的上下文小工具(这不是独立的应用程序)。左侧的“概述”和“计算”选项卡下似乎只有与云部署相关的选项。

当我尝试从 Apps Extensions Console 进行部署时(据说并未弃用,只是有所改进),我收到以下错误:

Google Apps Marketplace    (I never deployed to marketplace, only my own domain)
Application installation not allowed.
The OAuth1.0 version is no longer available.
Instead, try installing the OAuth2.0 version.
[Return to dashboard]   (button)

此外,返回仪表板按钮会将我带到域管理站点,该站点既不允许开发也不允许部署:

https://admin.google.com/mydomain.com/ https://admin.google.com/mydomain.com/

顺便说一句,Apps Extensions 控制台永远不会访问我创建的重定向页面,也永远不会读取我网站上的小工具规范文件(谷歌从未按照承诺访问),因此错误消息一定是说 manifest.xml 不使用 OAuth 2.0...或者 Apps Extensions Console 本身不使用它并为此责怪我!

因此,Gmail 上下文应用程序:

  • 已弃用?
  • 现在不可能了?
  • 通过 OAuth 2.0 授权?如何?

的文档Google 上下文小工具 https://developers.google.com/gmail/contextual_gadgets这是一个糟糕的笑话——过时且错误,不要浪费你的时间。

这里的答案让我更接近了,但我从来没有真正让事情发挥作用。

幸运的是我最终发现gmail.js https://github.com/KartikTalwar/gmail.js,这让我可以编写一个 Chrome 扩展来完成我需要的事情......

1-下载Gmail Chrome 扩展程序样板 https://github.com/KartikTalwar/gmail-chrome-extension-boilerplate项目,这是一个使用 gmail.js 的 Hello world 示例 chrome 扩展。

2- 将 main.js 文件中的 main 函数更新为如下所示:

var main = function(){

    gmail = new Gmail();
    gmail.observe.on("open_email", function(id, url, body, xhr) {

        // Inject a toolbar:
        var $email_body = gmail.dom.email_body();
        $email_body.prepend('<div class="my_toolbar"><a>Do something</a></div>');
    });
}

这会给你这个:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gmail 上下文小工具(Gmail 插件/扩展):已弃用?不可能的?如何? (无法执行 OAuth 2.0) 的相关文章

随机推荐

  • 日志中每天的每周活跃用户数

    我想知道是否有人可以帮助我使用一些 SQL 来返回两天或更长时间内登录到数据库表的唯一用户数量 让我们使用 7 天作为参考 我的日志表在每一行中包含时间戳 ts 和 user id 表示该用户当时的活动 以下查询返回此日志中的每日活跃用户数
  • eclipse行号状态行贡献项是如何实现的?

    我需要更新状态行编辑器特定的信息 我已经有了自己的实现 但我想看看 eclipse 贡献项是如何实现的 它显示状态行中的行号 列位置 谁能指点一下 哪里可以找到源代码 提前致谢 亚历克斯 G 我一直在研究它 它非常复杂 我不确定我是否了解完
  • 连接到 Visual Studio 中的构建过程

    我正在编写一个 Visual Studio 扩展 它允许编辑项目中特定类型的文件 该文件用作进一步自动代码生成的描述 类似于实体框架 我需要在构建项目之前执行代码生成 其中包含描述文件 代码生成算法 当前 放置在描述文件的编辑器内 有没有办
  • MANIFEST.in、package_data 和 data_files 澄清吗?

    我正在尝试创建一个 Python 包 并且目录结构如下 mypkg init py module1 x py y py z txt module2 a py b py 然后我将所有文件添加到MANIFEST in当我检查创建的存档时 它包含
  • 从 iOS 应用程序打开 YouTube 频道的最新 URL 方案是什么 [重复]

    这个问题在这里已经有答案了 我想使用 iPhone 应用程序中的频道打开 Youtube 应用程序 以前我使用以下 URL 方案并且工作正常 youtube 用户 频道名称 但在我将 Youtube 应用程序更新到最新的 2 6 0 后 这
  • 使用 OpenCV 和/或 Numpy 对两个图像进行 Alpha 混合 [重复]

    这个问题在这里已经有答案了 我想将一个填充纯色的半透明矩形添加到已加载的半透明 PNG 中 这是我正在使用的输入图像示例 该图像加载了标准cv2 IMREAD UNCHANGED标志 以便完美保留 alpha 通道 该输入图像存储在imag
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • 将 Chrome 扩展上的权限移至可选

    我了解到 Chrome 在添加新权限时会禁用扩展程序 当我向扩展添加新功能时 我需要在permissions列表 现在我知道我应该使用optional permissions 我的问题是 如果我将网站列表从permissions to op
  • Android:文本淡入和淡出

    我已阅读此 stackoverflow 问题和答案 并尝试实现文本淡入和淡出 Android中如何让文字淡入淡出 https stackoverflow com questions 8627211 how to make text fade
  • 远程测试时如何搭建git开发环境

    这似乎是一个愚蠢的问题 但我觉得我对 GIT 相当了解 但我似乎无法按照我的意愿设置我的开发环境 我要么错过了一些非常简单的东西 要么我做错了 我在我的服务器上初始化了一个裸 git 存储库 将其克隆到我的本地计算机 提交我的文件并推送到原
  • OCaml 中的不可变变量

    我正在学习 OCaml 我对变量的不变性有点困惑 根据我正在读的书 变量是不可变的 到目前为止一切顺利 但到底为什么我可以这样做 let foo 42 let foo 4242 我缺少什么 我认为最好的解释方法是举个例子 考虑以下代码 在
  • 如何从 HTA 中启动批处理文件

    我有一个基本的 HTA 其中我尝试通过按钮启动批处理文件 但是当我尝试启动批处理文件时 它不会运行 当我按下按钮时 将启动命令提示符窗口 但不会运行脚本 这是代码的简单示例
  • 如何在 Visual Studio 中搜索并让它忽略注释掉的内容?

    我正在 Visual Studio 2005 中重构 C 代码库 我现在已经完成了这个过程的一半 我已经注释掉了很多旧代码并替换或移动了它 现在我正在搜索 看看下一步必须更改 但搜索功能不断为我带来我不再关心的旧注释掉的内容 我还不想删除旧
  • 如何在 Visual Studio 2010 中处理 TODO 注释?

    我希望 Visual Studio 列出开头包含 TODO 的所有行 通常在注释符号之后 注释符号可能会根据文件类型而变化 这些行可以在解决方案中的任何文本文件中找到 无论是 C VB F T SQL ASPX XAML 或只是 TXT 在
  • 有没有一种简单的方法来生成不重复的字符串?

    我知道我可以使用 GUID 生成唯一的字符串 但它太长了 现在我只需要在网站内生成不重复的字符串 我该怎么办 谢谢 例如 在网站上http mathurl com http mathurl com 可以生成一个永久的URL 比如http m
  • 使用 Ansible 将二进制文件添加到 PATH

    我正在尝试安装Kiex https github com taylor kiex版本管理器Elixir http elixir lang org install html使用 Ansible 的编程语言 这些是我为此使用的戏剧 name K
  • 如何将 div (或任何元素)覆盖在表格行 (tr) 上?

    我想在恰好有多个列的表行 tr 标记 上覆盖一个 div 或任何可以使用的元素 我尝试了几种方法 似乎都不起作用 我在下面发布了我当前的代码 我确实得到了一个覆盖 但不是直接覆盖在该行上 我尝试将覆盖顶部设置为 div Bottom css
  • 如何使用 C++ 禁用另一个进程中窗口上的关闭按钮?

    我需要从另一个进程禁用窗口上的关闭按钮 我有它的句柄hWnd我尝试这样做 DWORD dwCStyle GetClassLongPtr hWnd GCL STYLE SetClassLongPtr hWnd GCL STYLE dwCSty
  • 如何将带有观察计数的标签添加到 stat_summary ggplot?

    我有一个数据集 例如 outcome lt c rnorm 500 45 10 rnorm 250 40 12 rnorm 150 38 7 rnorm 1000 35 10 rnorm 100 30 7 group lt c rep A
  • Gmail 上下文小工具(Gmail 插件/扩展):已弃用?不可能的?如何? (无法执行 OAuth 2.0)

    我们需要开发一个内部 gmail 扩展来处理传入的电子邮件 允许收件人与我们的内部软件进行交互 我一直试图弄清楚如何在 Gmail Contextual Gadget 中使用 OAuth 2 0 但我找不到任何具体的文档 当我使用 cont