【问题标题】:Facebook access_token not validFacebook access_token 无效
【发布时间】:2011-10-16 23:54:02
【问题描述】:

我正在为一个活动建立一个小网站。想法是将来自 facebook 活动的参加者添加到该网站。问题是参加服务需要一个 access_token。我不希望用户登录应用程序,我只想使用应用程序 access_token。但这似乎不起作用。

我有以下用于接收 access_token 的 php 代码:

// 获取 facebook auth_token $FB_APP_ID = '****'; $FB_APP_SECRET = '***'; $token_url = "https://graph.facebook.com/oauth/access_token?client_id="。 $FB_APP_ID 。 “&client_secret=”。 $FB_APP_SECRET 。 "&grant_type=client_credentials"; $app_token = file_get_contents($token_url); parse_str($app_token); // 创建:$access_token

在 javascript 中,我使用以下代码:

/**
 * Gets all the attending Users
 * @param function callback: the function to call, when data loading is ready
 * @param function callback: the function to call, when data loading is broken
 * @return void
 */
this.getAttending = function(callback, errorHandler) 
{
    FB.api('/' + this.eventId + '/attending', function(response) {
        if(response.error) {
            errorHandler(response.error['message']);
        } else {
            callback(response.data);
        }
    } , {access_token: facebook.accessToken} );    
}

我收到错误: OAuth 访问令牌无效。

访问令牌如下所示: 111737995591905|l9e3niEMM1RsIUhwHZv3pn3c19M

用户访问令牌如下所示: 145634995501895|2.AQBcWfbvdzhloLYc.3600.1312138800.1-1146858041|cjCkHZqquyyFyX2dY0q2YCaSyy0

当我尝试使用用户访问令牌时,一切正常。但是当我对令牌进行硬编码时,这对其他用户不起作用。当我尝试服务器为我解析的令牌时,我得到了无效的令牌操作。有人知道解决方案吗? 这是一个公共活动,我不希望用户在知道谁参加之前登录?

这可能吗? 谢谢!

【问题讨论】:

    标签: php javascript facebook-graph-api oauth


    【解决方案1】:

    我解决这个问题的方法是指定offline_access 权限,它会生成一个永不过期的访问令牌,因此您可以无限期地使用它。理论上,您将仅授权您的 Facebook 帐户从中提取事件数据。然后,您可以毫无问题地查看活动详细信息并将其提供给您的网站。

    【讨论】:

    • 这是一个相当肮脏的解决方法:每个人都将使用我的 access_token。每个人都可以看到它。我不知道这是否会对我的帐户造成损害,但我不喜欢这种解决方案。我找到了解决方案(见上图)。无论如何谢谢:)
    • 只要您定义了您希望授予应用访问权限的其他权限(IE 活动),那么只要您不介意人们能够看到您正在参加的活动(我可以看看为什么这可能是一个安全问题)那么这通常不是问题。在我使用它的情况下,它是一个公开可见的页面,它没有向任何人隐藏任何内容,所以你可以看到,这不是一个真正的问题。不过很高兴您找到了解决方案!
    【解决方案2】:

    您是否在硬编码时对令牌进行了编码? |应该是 %7C 。 暂时想不出还有什么可能出错的地方

    【讨论】:

    • 我没有对 access_token 进行编码。这不应该是必需的,因为我使用 javascript API 调用 web 服务,而不是使用 URL。这也是我的问题:我试图将 expires 查询变量放在 access_token 后面。可能这已被解码并返回为无效的 access_token。现在似乎可以使用简短的 access_token。
    【解决方案3】:

    为什么不为自己获取一个访问令牌,然后在您的应用程序中对其进行硬编码(假设它运行在其他人无法窃取凭据的安全服务器上)。然后任何访问该页面的人都可以使用您自己的访问令牌查看访客列表,该令牌有权查看该列表。

    client_credentials 授权类型不适用于访问用户数据,仅用于访问应用程序数据。我不知道应用程序的其余部分是如何工作的,但我假设您需要用户访问令牌才能查看用户数据。

    【讨论】:

    • 因为 access_token 有一个过期日期。目前我选择了 javascript 解决方案,因为它异步加载信息。因此访问令牌将不在安全环境中。我不想要用户凭据。我只想展示与会人员的照片。这是一个简单的活动网站,因此无需让应用程序请求用户权限。只需要公共事件数据。
    • 在不暴露访问令牌的情况下构建一个为列表提供服务的 API 端点非常简单。
    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    相关资源
    最近更新 更多