获取用户的facebook访问令牌

时间:2014-10-14 19:34:46

标签: ruby-on-rails facebook facebook-graph-api cookies

我正在为我的网站寻找集成浏览器,并且希望能够获得用户的访问令牌,以便在刚刚登录后获得进一步的交互功能。我已经使用javascript SDK获得了登录过程,我可以通过查询/ me边缘获取用户的信息。根据我读过的内容,我应该可以让我的服务器通过查询oauth / access_token边缘API来获取用户访问令牌。

我的查询结构如下

HTTParty.get(URI.escape("https://graph.facebook.com/oauth/access_token?client_id=1398254717088095&redirect_uri=http://portal.ggwifi.net/test_portal/&client_secret=xxxxxxxxxxxxxxxxxxxxxxxxxxx&code=5TPMo3WelM6aDm7zbvVBkZTlV_5ydQaHPP26Ytfv7Hg.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUUFZUVVfS3laTk9hcjFPN0JtUTdVUXhudmpRQjF5SjEwN3J1dXRBVmF4WEZ0V3lzY3g0MmxFUXlwZ2JvYzFsbmpGLUxXZDYwanRMNUtPeU5xMVlGUGRjSzJuQ3dTQ0ctOXEwQmV5eUFTM2dnck5uN1NiRWVZY2Uzck03YmpOYU5vY1R0NVJDSWlrMUZybWN5aDRMVEp6R3Q3dmN1M18zY0ZSbklyc1ZNcGN2cEtxajJ1QjRzUFA1aE52cDV6VXBIaktnd3Y5QU5HZHd5b2ZFYjViRHk4eHEzYVFTQVg0QWNwdUJoemFUWGpINkZ6WDVra29GbTh2Zzg5M1oxVExGRWJsektzSTJUdW9fX1ZlLXN4Si1KUDYyeWg0blhQRjc0LUJRelJBenhsbHNIUm05VUhKemNQbW8wYk04MDB3dXd6dDJsb210YkRvenhUQXFCdHk1T1NiYyIsImlzc3VlZF9hdCI6MTQxMzMxMzQzNSwidXNlcl9pZCI6IjIyMzAxNDc1In0"))

其中code是存储在cookies中的值[:fbsr_1398254717088095]。

我尝试了这个,但每次尝试时都会失败并显示错误:

{
  "error": {
    "message": "Invalid verification code format.", 
    "type": "OAuthException", 
    "code": 100
  }
}

我已经在某个地方读过代码需要在'。'分开,但我也尝试过(使用该部分之前的部分以及之后的部分,但它也没有工作。

我是否需要以其他方式操纵存储在cookie中的代码才能获得令牌?我在这里缺少什么?

PS - 我还尝试使用图形api资源管理器获取令牌,粘贴我的cookie值,但得到相同的错误。

1 个答案:

答案 0 :(得分:0)

为了它的价值,我在facebook的文档中找到了我的解决方案 https://developers.facebook.com/docs/facebook-login/using-login-with-games/#parsingsr

Cookie实际上是一个签名请求,但需要使用以下步骤进行解释:

- Split the signed request into two parts delineated by a '.' character (eg. 238fsdfsd.oijdoifjsidf899) 
- Decode the first part - the encoded signature - from base64url 
- Decode the second part - the 'payload' - from base64url and then decode the resultant JSON object

我现在唯一的问题是cookie似乎很快就会过期,因此它不能使用很长时间,但我可以将令牌存储为持久api访问的会话变量。

编辑:猜猜我还不是100%,因为我能够获得访问令牌一次(但在测试中,并没有将其存储在任何地方)但是当我再次尝试获取它时,facebook告诉我授权码已被使用。注销,甚至取消对应用程序的授权并重新登录也无法创建新代码。