【问题标题】:Obtaining user's facebook access token获取用户的 facebook 访问令牌
【发布时间】:2014-12-09 17:23:38
【问题描述】:

我正在为我的网站进行 Facebook 查找集成,并且希望能够获得用户的访问令牌,以便在登录之后进行进一步的交互功能。我已经使用 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 值,但得到相同的错误。

【问题讨论】:

  • 当然不行。获取访问令牌的方法是向用户显示登录对话框。用户可以选择是否使用您的应用程序。使用 cookie 中的值将不起作用
  • 用户已接受登录对话框并授予我的应用权限。但是如何使用用户的访问令牌进行服务器到服务器的 API 调用?我的研究表明 fbsr cookie 是一个签名请求,应该可以使用我的应用程序的密钥对其进行解码以获得访问令牌,但我不知道该怎么做。
  • fbsr cookie 是在 facebook.com 上使用的东西,您不应该使用任何东西。您只需存储用户接受登录对话框并授予您的应用权限时获得的访问令牌

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


【解决方案1】:

对于它的价值,我在 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 告诉我授权码已被使用。注销,甚至取消对应用的授权并重新登录也不会让它创建新代码。

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2012-05-17
    • 2012-08-13
    相关资源
    最近更新 更多