如何使用带有chrome.identity的Oauth2获取Facebook令牌

时间:2014-01-23 15:30:04

标签: javascript google-chrome-extension oauth facebook-oauth facebook-access-token

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

与Google+配合使用。但出于某种原因,它不适用于Facebook。出于某种原因,Facebook的OAuth似乎很特别。我已将extensionid.chromiumapp.org添加到API中的重定向网址列表中。添加了

"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."} »

当我使用像

这样的网址时
«"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?

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

3 个答案:

答案 0 :(得分:5)

我已经解决了这个问题。以下是https://github.com/blackgirl/Facebook_Oauth2_sample_for_extensions

的示例

答案 1 :(得分:0)

“需要用户互动”。消息表示用户需要登录Facebook,和/或批准所请求的OAuth范围。设置{interactive:true}标志将允许identity.launchWebAuthFlow显示用户将执行这些步骤的窗口。由于您传递了{interactive:false}标志,因此identity.lauchWebAuthFlow失败。

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

但是,如果您确实要调试“无法加载授权页面”的情况,那么执行此操作的方法是打开chrome:// net-internals并查找从Facebook返回的错误响应。

答案 2 :(得分:0)

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);
});

//'interactive':true

  

这个标志会做什么,会显示一个询问用户名和密码的对话框   成功登录后,它会要求授予访问权限,只需按下即可   您将在上面的函数体中收到重定向URL。