Chrome身份启动WebAuthFlow仅会打开空回调页面

时间:2015-06-03 06:11:52

标签: javascript google-chrome-extension callback oauth-2.0 identity

对不起还有另一个可能是noob的问题,通常我不会屈服,直到我自己找到一个解决方案,但这个让我去了3天,是时候承认我被困了......

我尝试通过OAuth2验证Chrome扩展程序以使用PushBullet用户数据:

background.js

var client_id = '<32 DIGIT CLIENT ID>'; 
var redirectUri = "chrome-extension://lgekckejcpodobwpelekldnhcbenimbe/oauth2";
var auth_url = "https://www.pushbullet.com/authorize?client_id=" + client_id + "&redirect_uri=" + encodeURIComponent(redirectUri) + "&response_type=token";

chrome.identity.launchWebAuthFlow({'url':auth_url,'interactive':true}, function(redirect_url){
    console.log(redirect_url)
});

的manifest.json:

"permissions": [
    "identity", 
    "*://*.google.com/*",
    "*://*.pushbullet.com/*",   
    "storage"
  ],
  "web_accessible_resources": [ 
    "/oauth2/*"

加载扩展程序时:

  1. Pushbullet授权弹出窗口打开,并要求授予我的分机(OK)
  2. 我同意(好)
  3. Pushbullet窗口关闭,新的空白页面打开的URL windows是带有令牌的回调URI:
  4.   

    铬扩展://lgekckejcpodobwpelekldnhcbenimbe/oauth2#access_token=o.zrrWrDozxMu6kftrMHb89siYJQhRVcoL

    我没想到会打开一个空页面,而是让launchWebAuthFlow捕获了URI并将其写入控制台日志中,就像在回调函数中编码一样......但它似乎在等待......

    现在唯一的选择是关闭此空白页面,以查看以下记录:

      

    运行identity.launchWebAuthFlow时未经检查的runtime.lastError:用户未批准访问权。

    显然,我错过了一些至关重要的内容......我是否需要额外的代码&#34;某处&#34;在我的background.js中获取回调URI?

    谢谢,真的很高兴帮助。

    暗影

2 个答案:

答案 0 :(得分:16)

您误解了identity API

无法将其与自定义回调网址一起使用。 API希望您使用表单

的URL
https://<app-id>.chromiumapp.org/*

您可以通过调用chrome.identity.getRedirectURL(path)

获得
  

当提供商重定向到与模式https://<app-id>.chromiumapp.org/*匹配的URL时,窗口将关闭,最终的重定向URL将传递给回调函数。

这是因为很多OAuth提供商都不接受chrome-extension://网址作为有效网址。

如果你的确很棒 - 但是你需要使用自己的OAuth库(和令牌存储,这更糟)。 chrome.identity仅适用于上述内容。

请注意,网络请求实际上并未发送到此流程中的chromiumapp.org地址 - 这是API截获的“虚拟”地址。

答案 1 :(得分:7)

为可能与之抗争的其他任何人快速阐述解决方案:

这是工作代码:

<强> background.js

var client_id = '<CLIENT_ID>';
var redirectUri = chrome.identity.getRedirectURL("oauth2");     
var auth_url = "https://www.pushbullet.com/authorize?client_id=" + client_id + "&redirect_uri=" + redirectUri + "&response_type=token";

    chrome.identity.launchWebAuthFlow({'url':auth_url,'interactive':true}, function(redirect_url){
        console.log(redirect_url)
    });

<强> manifest.js

"permissions": [
    "identity", 
    "*://*.google.com/*",
    "*://*.pushbullet.com/*",   
    "storage"
  ],      

再一次,谢谢Xan并度过了美好的一天。

最诚挚的问候,

暗影