【问题标题】:How to use OAuth with Github in a Safari extension如何在 Safari 扩展中使用 OAuth 和 Github
【发布时间】:2015-02-13 04:07:03
【问题描述】:

我是浏览器扩展的新手。我正在尝试创建一个允许我在我的 Github 帐户中执行基本任务的 Safari 扩展程序(例如,创建一个 repo)。我这样做主要是为了学习如何在练习 JS 的同时开发扩展。

问题是为了连接到 Github,我想使用 OAuth,但我不知道该怎么做。我用谷歌搜索,看看我是否能找到一个我可以使用但没有任何结果的库。主要问题是,当尝试在 Github 上注册我的“应用程序”时,我不知道为主应用程序和回调提供什么 URL,因为它不是我正在开发的 Web 应用程序;这是一个扩展。

有没有人有这方面的经验,可以给我提示如何进行?我应该使用什么 URL 来注册 Github?是否可以从扩展中使用 OAuth?是否有库、SDK 或任何可以帮助完成这项工作的东西? 如果这个问题可以扩展到任何浏览器,请告诉我,我会更改标题以帮助处于相同情况的其他人。

感谢大家的帮助。

【问题讨论】:

    标签: javascript github oauth safari safari-extension


    【解决方案1】:

    我在 Safari 扩展程序中使用了 OAuth,欢迎您查看我的代码作为示例(请参阅下面的链接),但这个 JS library for Github 可能满足您的所有需求。我没用过,但它看起来不错,而且它支持“个人访问令牌”,我认为它是一种不需要指定重定向 URI 的 Github 的 OAuth 令牌。

    我的 Safari 扩展程序 (Github link) 使用 OAuth 2.0 与 Pocket API 对话。它不使用库。对于重定向 URI,我使用与启动整个授权过程的页面相同的 URL,但附加了“?status=done”。页面的脚本检查其 URL,如果 URL 以该字符串结尾,则它知道该页面是由授权窗口加载的,因此它可以继续获取访问令牌。

    在任何类型的客户端应用程序(例如浏览器扩展程序)中使用 OAuth 时,您应该注意的一件事是,您的 OAuth 应用程序令牌将暴露给您应用程序的用户。即使您在应用程序中对其进行加密或通过 https 从服务器检索它,用户也可以使用浏览器的内置 JS 调试器来获取令牌,因为您必须在某些时候对其进行解密才能使用它。如果有人偷了你的令牌,他们可以用来欺骗人们授权他们伪装成你的恶意应用程序。由您决定这种风险是否可以承受。避免这种风险的唯一方法是拥有自己的与第三方 API 通信的服务器端应用程序,并且您的扩展程序与之通信。但是随后有人可以从您的扩展程序代码中学习如何与您的服务器端应用程序通信,所以我不确定这是否真的能为您带来任何好处。

    【讨论】:

    • 我会看看你的解决方案。您提到的安全问题非常相关,找到解决方法(如果有的话)将有助于进行健壮的扩展。我可以指示扩展的用户创建并提供个人令牌。在这种情况下,我可以在哪里安全地存放它?网络本地存储?扩展设置?
    • 我查看了您的解决方案。它看起来非常优雅。如果您不介意,我会按照您的 OAuth 建模我的模型,只是为了学习。
    • Safari 确实为safari.extension.secureSettings 中的设置提供了一个安全的存储空间,因此您可以使用它来存储用户提供的令牌。
    • 很棒的@canisbos,你的代码对我来说看起来有点复杂,因为我对 JS 的经验并不多,但我会弄清楚的。如果您能澄清一些事情,我将不胜感激:您在 Extension Builder 中定义的某些元素是否未使用?我看到各种菜单和至少两个工具栏项,但我看不到您在哪里使用其中一些(我安装了您的扩展程序)。感谢您的时间和耐心。这就是我朝着正确方向前进所需要的一切。
    • @reydelleon 两个工具栏项都被使用,但“Put”项默认不存在;您必须使用 Safari 的自定义工具栏功能将其添加到工具栏中。只有在设置对话框中将“当我单击工具栏按钮时”设置为“显示可能操作的菜单”时,才会显示该菜单。 Extension Builder 中定义的一些弹出框没有被使用。
    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多