Chrome身份launchWebAuthFlow仅打开空回调页面

问题描述 投票:0回答:2

抱歉,又一个可能是菜鸟的问题,通常我不会屈服,直到我自己找到解决方案,但这个问题让我花了三天时间,是时候承认我陷入困境了......

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

背景.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 授权弹出窗口打开并要求授予我的扩展权限(确定)
  2. 我同意(好的)
  3. Pushbullet 窗口关闭 并打开一个新的空白页面 URL windows 是带有令牌的回调 URI:

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

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

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

运行identity.launchWebAuthFlow时未选中runtime.lastError:用户未批准访问。

显然我错过了一些重要的东西......我是否需要“某处”额外的代码来获取background.js中的回调URI?

谢谢,非常感谢您的帮助。

暗影猎手

javascript google-chrome-extension callback oauth-2.0 identity
2个回答
27
投票

您误解了

identity
API

不能将其与自定义回调 URL 一起使用。 API 希望您使用以下形式的 URL

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

您可以致电

chrome.identity.getRedirectURL(path)

获取

当提供程序重定向到与模式

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

这是因为许多 OAuth 提供商不会接受

chrome-extension://
URL 为有效。

如果您这样做 - 很好,但您需要使用自己的 OAuth 库(以及令牌存储,这更糟糕)。

chrome.identity
仅适用于上述内容。

请注意,网络请求实际上并未发送到此流程中的

chromiumapp.org
地址 - 它是 API 拦截的“虚拟”地址。


13
投票

为其他可能遇到困难的人快速阐述解决方案:

这是工作代码:

背景.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"
  ],
© www.soinside.com 2019 - 2024. All rights reserved.