【问题标题】:What Redirect URL can I set for oauth2 callback in a chrome extension?我可以为 chrome 扩展中的 oauth2 回调设置什么重定向 URL?
【发布时间】:2016-03-28 23:45:49
【问题描述】:

我想在 chrome 扩展中使用 Imgur API。来自用户输入的身份验证响应被发送到我在 imgur 网页上的应用程序配置文件中设置的“重定向 url”。

如何设置“重定向 url”以指向用户的 chrome 浏览器扩展?

我只看到设置一个小型服务器来跟踪我的用户令牌的繁重解决方案:

  1. 我的扩展程序检查 imgur 令牌:如果找到,则启动扩展程序工作流,否则转到第 2 步。
  2. 我的扩展程序要求 imgur api 提供其身份验证表单。
  3. 用户填写表单,这是自我管理的,表单将其用户名/密码发送回 imgur 服务器。
  4. Imgur 服务器向指定的“redirect-url”发送包含令牌的查询请求。
  5. 此“重定向 url”是我的服务器 url,它检索令牌。
  6. [不知道怎么做这一步]服务器和扩展交换并且扩展至少检索到宝贵的令牌。
  7. 使用该令牌,扩展程序至少可以显示 imgur 图片。

他们的文档提到 localhost 作为可能的 url 重定向。我正在朝这个大方向挖掘,但它对我来说没有意义:似乎更像是对开发人员的本地测试,而不是我正在寻找的答案。

感谢您的任何意见。

【问题讨论】:

    标签: javascript google-chrome-extension oauth-2.0 imgur


    【解决方案1】:

    在大多数情况下,令牌会附加到重定向 url。因此,您可以使用chrome.tabs.onUpdated.addListener() 收听标签更新,并检查标签 url 何时包含"access_token="。现在它将收听每个选项卡。如果您自己创建身份验证选项卡,您将在其回调中获得一个 id。使用此 ID,您可以在 chrome.tabs.onUpdated.addListener() 回调中检查它是否与您创建的选项卡相同,或者如果选项卡 url 与重定向 url 匹配,则可以匹配。两者都可以。

    示例代码:

          chrome.tabs.onUpdated.addListener(function authorizationHook(tabId, changeInfo, tab) {
                    if (tabId === authenticationTabId && tab.title.indexOf(redirectUrl) >= 0) {
                        //If you don't have the authentication tab id remove that part 
                              if(tab.title.indexOf("access_token=") >=0){//tab url consists of access_token
                                var url = tab.title;
                                /* 
                                   Code to extract token from url
                                */
                                chrome.tabs.onUpdated.removeListener(authorizationHook);          
                              }                 
                    }
           });
    

    您还需要"tabs" 权限才能使其工作

    编辑:您也可以使用chrome.identity.launchWebAuthFlow()。你必须使用:

    Javascript 来源: https://<extensionid>.chromiumapp.org

    重定向网址: https://<extensionid>.chromiumapp.org/provider_cb

    这是一个使用chrome.identity.launchWebAuthFlow()github-auth 应用程序的绝佳示例。相同的代码可以在扩展中使用。

    【讨论】:

    • 编辑:等等,回调如何在第一时间重定向到我的标签?应该设置什么值来重定向 Url ?
    • 我回答了您在问题中提出的问题。您需要提供更多详细信息,例如您使用的是弹出窗口还是选项卡。您在问题中提到重定向 uri 是您的网络服务器,因此请使用它。
    • 不,不,不。我问我应该放什么 Url Redirect 才能将令牌返回到我的 Chrome 扩展选项卡、弹出窗口或最适合的任何内容。我没有看到任何解决方案。因此,我考虑设置一个服务器来接收回调。但在这样做之前,我询问了社区是否有人知道接收 OAuth2 回调到 chrome 扩展的方法。抱歉,英语不是我的母语。
    • 对于重定向 uri,任何带有 https:// 或 http:// 协议的 url 都应该可以工作。我还编辑了我的答案以添加另一种获取访问令牌的方法。它可能会对你有所帮助。
    • Chrome 页面遵循 chrome-extension:// 协议,该协议对重定向 URL 无效。因此,chrome 提供了一种以 https://.chromiumapp.org/* + 'provider_cb' 的形式提供扩展重定向 url 的方法,它与 chrome.identity.launchWebAuthFlow() 配合得很好。你不需要一个正在运行的服务器。更多信息:developer.chrome.com/apps/app_identity#non
    【解决方案2】:

    了解所有 https 操作和调用都应在 background.js 中通过 chrome.identity api 进行,这一点很重要。因此,最好的方法是从您开始操作的任何位置发送一条消息到 backgound.js,然后您会通过以下方式获得 redirectURL:

    const REDIRECT_URL = chrome.identity.getRedirecURL;
    

    请注意,您需要使用 oauth 进程

    chrome.identity.launchWebAuthFlow
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 2012-08-17
      • 2014-08-17
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2020-11-23
      • 2015-10-12
      相关资源
      最近更新 更多