Chrome identity launchWebAuthFlow 只打开空的回调页面
Chrome identity launchWebAuthFlow only opens empty callback page
抱歉又一个可能是菜鸟的问题,通常我不会放弃,直到我自己找到解决方案,但这个问题让我坚持了 3 天,是时候承认我被困住了...
我正在尝试验证 Chrome 扩展以通过 OAuth2 使用 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/*"
当我加载扩展时:
- Pushbullet 授权弹出窗口打开并要求授予我的扩展权限(确定)
- 我同意(好)
- Pushbullet window 关闭 并且一个新的空页面运行 URL
windows 是带有标记的回调 URI:
chrome-extension://lgekckejcpodobwpelekldnhcbenimbe/oauth2#access_token=o.zrrWrDozxMu6kftrMHb89siYJQhRVcoL
我没想到会打开一个空页面,而是让 launchWebAuthFlow 捕获了 URI 并将其写入控制台日志,就像在回调函数中编码的那样……但它似乎在等待……
现在唯一的选择是关闭这个空白页面,只看到以下记录:
Unchecked runtime.lastError while running identity.launchWebAuthFlow: The user did not approve access.
显然我遗漏了一些重要的东西...我需要额外的代码 "somewhere" 才能在我的 background.js 中获取回调 URI 吗?
谢谢,非常感谢帮助。
暗影猎手
你误解了identity
API。
您不能将它与自定义回调一起使用URL。 API 希望您使用 URL 形式的
https://<app-id>.chromiumapp.org/*
您可以通过调用 chrome.identity.getRedirectURL(path)
获得
When the provider redirects to a URL matching the pattern https://<app-id>.chromiumapp.org/*
, the window will close, and the final redirect URL will be passed to the callback function.
这是因为许多 OAuth 提供者不接受 chrome-extension://
URL 有效。
如果你这样做了 - 很好,但你需要使用自己的 OAuth 库(和令牌存储,这更糟)。 chrome.identity
仅适用于上述内容。
请注意,网络请求实际上并未发送到此流程中的 chromiumapp.org
地址 - 它是被 API.
拦截的 "virtual" 地址
为可能遇到困难的其他人快速阐述解决方案:
这是工作代码:
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,祝你今天愉快。
谨致问候,
暗影猎手
抱歉又一个可能是菜鸟的问题,通常我不会放弃,直到我自己找到解决方案,但这个问题让我坚持了 3 天,是时候承认我被困住了...
我正在尝试验证 Chrome 扩展以通过 OAuth2 使用 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/*"
当我加载扩展时:
- Pushbullet 授权弹出窗口打开并要求授予我的扩展权限(确定)
- 我同意(好)
- Pushbullet window 关闭 并且一个新的空页面运行 URL windows 是带有标记的回调 URI:
chrome-extension://lgekckejcpodobwpelekldnhcbenimbe/oauth2#access_token=o.zrrWrDozxMu6kftrMHb89siYJQhRVcoL
我没想到会打开一个空页面,而是让 launchWebAuthFlow 捕获了 URI 并将其写入控制台日志,就像在回调函数中编码的那样……但它似乎在等待……
现在唯一的选择是关闭这个空白页面,只看到以下记录:
Unchecked runtime.lastError while running identity.launchWebAuthFlow: The user did not approve access.
显然我遗漏了一些重要的东西...我需要额外的代码 "somewhere" 才能在我的 background.js 中获取回调 URI 吗?
谢谢,非常感谢帮助。
暗影猎手
你误解了identity
API。
您不能将它与自定义回调一起使用URL。 API 希望您使用 URL 形式的
https://<app-id>.chromiumapp.org/*
您可以通过调用 chrome.identity.getRedirectURL(path)
When the provider redirects to a URL matching the pattern
https://<app-id>.chromiumapp.org/*
, the window will close, and the final redirect URL will be passed to the callback function.
这是因为许多 OAuth 提供者不接受 chrome-extension://
URL 有效。
如果你这样做了 - 很好,但你需要使用自己的 OAuth 库(和令牌存储,这更糟)。 chrome.identity
仅适用于上述内容。
请注意,网络请求实际上并未发送到此流程中的 chromiumapp.org
地址 - 它是被 API.
为可能遇到困难的其他人快速阐述解决方案:
这是工作代码:
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,祝你今天愉快。
谨致问候,
暗影猎手