试图获取应用访问令牌

Posted

技术标签:

【中文标题】试图获取应用访问令牌【英文标题】:trying to get app access token 【发布时间】:2012-10-08 13:35:34 【问题描述】:

我尝试使用以下代码为我的 facebook 应用获取 app-access-token:

APP_ACCESS_TOKEN = FB.api(
    "oauth/access_token",
    client_id: APP_ID, client_secret: APP_SECRET_CODE, redirect_uri: uri,
    function(response)
    console.log(response);
);

应该是这样的:

GET https://graph.facebook.com/oauth/access_token?
        client_id=YOUR_APP_ID
       &client_secret=YOUR_APP_SECRET
       &redirect_uri=uri

但我得到一个错误:

code: 1
message: "Missing authorization code"
type: "OAuthException"

什么是授权码,如何获取?

【问题讨论】:

您找到可行的解决方案了吗? 对不起,我不记得了。太久了。那是在实验室期间。 【参考方案1】:

获取应用访问令牌

要获取应用访问令牌,请调用以下 HTTP GET 请求:

GET https://graph.facebook.com/oauth/access_token?
            client_id=YOUR_APP_ID
           &client_secret=YOUR_APP_SECRET
           &grant_type=client_credentials

API 将以如下形式的查询字符串格式的字符串进行响应:

access_token=YOUR_APP_ID|YOUR_APP_ACCESS_TOKEN

参考:http://developers.facebook.com/docs/opengraph/howtos/publishing-with-app-token/

【讨论】:

更新链接:developers.facebook.com/docs/facebook-login/… 谢谢,我正在找这个+! 什么是 client_credentials ? @VlasBashynskyi 如果你问你应该在那里输入什么值,你不是,它不是一个占位符,它是你使用的实际值。如果你问它做什么,不确定但可能让 facebook 知道你想要某种客户端凭据。 截至 2017 年 4 月 27 日,api 响应格式已更改,并返回 "access_token":"YOUR_APP_ID|YOUR_APP_ACCESS_TOKEN","token_type":"bearer"【参考方案2】:

https://developers.facebook.com/docs/howtos/login/login-as-app/:

“因为它要求您包含您的 App Secret,所以您不应尝试在客户端进行此调用,因为这会将这个 Secret 暴露给您的所有应用程序用户。 绝对不要与任何人共享您的 App Secret,这一点很重要。因此,此调用应在服务器端执行”

对于应用访问令牌,它也是一样的——你永远不应该在客户端使用它,因为每个用户都可以在那里发现它,然后开始使用它来代表你的应用执行操作(或更改您应用的许多设置)。

如果您的应用程序有服务器端部分,您可以简单地自己“构建”应用程序访问令牌,将应用程序 ID 和密码与管道符号 app_id|app_secret 连接起来。

【讨论】:

非常感谢有关如何创建访问令牌的信息! 即使您隐藏了 .js 文件,人们仍然可以在客户端看到它吗? 当然可以,没有“隐藏”客户端脚本。 @CBroe 感谢分享拥有永久访问令牌app_id|app_secret 连接方法。我一直在寻找这个问题的答案。 如果我们使用应用令牌(永久令牌),是否需要提交 Facebook 应用进行审核?我们仅使用此应用令牌来获取 Facebook 页面的点赞数。完全有用户登录。【参考方案3】:

检查 node.js 或 javascript 的用户。

getLongLiveToken: function(data)
    FB.api('oauth/access_token', 
        client_id: data.client_id, // FB_APP_ID
        client_secret: data.secret, // FB_APP_SECRET
        grant_type: 'fb_exchange_token',
        fb_exchange_token: data.access_token // USER_TOKEN
    , function (res) 
        if (!res || res.error) 
            console.log(!res ? 'error occurred' : res.error);
         else 
            var accessToken = res.access_token;
            if(typeof accessToken != 'undefined')
        
    );

【讨论】:

【参考方案4】:

我不确定在代码中公开 APP 客户端密码是个好主意,您可以从 Facebook 工具“访问令牌工具”中获取 APP 令牌,只需将令牌复制到您的代码中以供任何使用https://developers.facebook.com/tools-and-support/

【讨论】:

【参考方案5】:

您也可以在不生成令牌的情况下使用此 POST 端点,只需确保它是从服务器调用的,而不是从 app_secret 公开的客户端调用:

https://graph.facebook.com/?id=url&scrape=true&access_token=app_id|app_secret

【讨论】:

以上是关于试图获取应用访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

获取 OpenID Connect / OAuth 访问令牌以调用 MS Dynamics

如何使用 Green Button API 获取访问令牌?

如何在 C# 中从 Facebook SDK 获取当前用户访问令牌?不是应用访问令牌

如何从 .Net core 2.0 中的 HttpContext 获取访问令牌

JWT 访问令牌:矛盾?

Azure 条件访问不适用于令牌获取请求?