Javascript 如何使用Oauth2和chrome.identity获取Facebook令牌

Javascript 如何使用Oauth2和chrome.identity获取Facebook令牌,javascript,google-chrome-extension,oauth,facebook-oauth,facebook-access-token,Javascript,Google Chrome Extension,Oauth,Facebook Oauth,Facebook Access Token,我在一个打包应用程序中使用chrome.identity,通过Facebook获取用户令牌。我调用chrome.identity.launchWebAuthFlow,需要获取访问令牌,将其发送到服务器,然后使用访问令牌验证用户 与Google+配合使用效果很好。但出于某种原因,它不适用于Facebook。出于某种原因,Facebook的OAuth看起来很特别。我已经将extensionid.chromiumapp.org添加到API中的重定向URL列表中。增加 "https://extensio

我在一个打包应用程序中使用chrome.identity,通过Facebook获取用户令牌。我调用chrome.identity.launchWebAuthFlow,需要获取访问令牌,将其发送到服务器,然后使用访问令牌验证用户

与Google+配合使用效果很好。但出于某种原因,它不适用于Facebook。出于某种原因,Facebook的OAuth看起来很特别。我已经将extensionid.chromiumapp.org添加到API中的重定向URL列表中。增加

"https://extensionid.chromiumapp.org/*",
    "https://facebook.com/*",
    "https://www.facebook.com/dialog/",
    "https://graph.facebook.com/*"
到manifest.json。但一切都没有改变

在调用chrome.identity.launchWebAuthFlow时,我使用如下URL

"https://www.facebook.com/dialog/oauth/access_token?" +
                   "client_id=myclientid&client_secret=myclientsecret&" + 
                  "response_type=token&grant_type=client_credentials"
当我尝试调用它时,会收到以下错误消息:

«launchWebAuthFlow completed Object {message: "Authorization page could not be loaded."} »
当我使用URL时,比如

«"https://www.facebook.com/dialog/oauth?client_id=myclientid&redirect_uri=https://myextensionid.chromiumapp.org/facebook.com=token&scope=user"» 
我得到下一个错误:

«launchWebAuthFlow completed Object {message: "User interaction required."} undefined »
我尝试在4天内获得facebook代币。我累了。我做错了什么? 为什么chrome.identity.getAuthToken对Google+和chrome.identity.launchWebAuthFlow在Facebook上都很有用

我希望有人也做过同样的事情,可以帮助我。

需要用户交互。这条消息意味着用户需要登录Facebook,和/或批准请求的OAuth范围。设置{interactive:true}标志将允许identity.launchWebAuthFlow显示一个窗口,用户将在其中执行这些步骤。由于您正在传递{interactive:false}标志,identity.lauchWebAuthFlow将失败

https://www.facebook.com/dialog/oauth
很可能是您想要用来启动流程的URL。客户端_凭据授权通常用于访问应用程序拥有的资源,而不是特定用户拥有的资源的情况


但是,如果您确实想调试“无法加载授权页”的情况,则可以打开chrome://net-internals 然后查看Facebook返回的错误响应。

我已经解决了这个问题。这里有一个例子

/“交互式”:真

此标志的作用是什么,将显示一个询问用户名和密码的对话框 成功登录后,它将请求授予访问权限,只需按该键并 您将在上述函数体中收到重定向url


不需要“用户交互”提醒你什么?调用crome.identity.launchWebAuthFlow()时是否使用了“interactive”标志?我使用了-chrome.identity.launchWebAuthFlow({'interactive':false,'url':authUrl},函数(令牌){});和-var authUrl=”“client\u id=myclientId&client\u secret=myclientSecret&“+”response\u type=token”;您是否尝试将“interactive”更改为true?只想添加您需要在facebook应用程序设置中批准的域。转到高级->启用嵌入式浏览器OAuth登录并将您的url放入“有效的OAuth重定向URI”。
chrome.identity.launchWebAuthFlow(
{'url': 'https://www.facebook.com/dialog/oauth?client_id=myclientid&redirect_uri=https://myextensionid.chromiumapp.org/facebook.com=token&scope=user, 'interactive': true},
function(redirect_url) { 
    /* Extract token from redirect_url */ 
    console.log(redirect_url);
});