如何验证facebook访问令牌?

So *_*ung 102 facebook

服务器必须做的事情; 只需检查任何访问令牌的有效性.

客户端向FB服务器发送FB.getLoginStatus获取的用户ID和访问令牌.

正如我所料,会有任何url检查访问令牌的有效性,例如

http://xxx.facebook.com/access_token?=xxxxxxxxxxxxxxxxxxxxxxxxxxxx

返回它是否可用.

或者是否有任何API(服务器端)?

ryn*_*nop 130

官方支持的方法是:

GET graph.facebook.com/debug_token?
     input_token={token-to-inspect}
     &access_token={app-token-or-admin-token}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅检查令牌文档.

一个示例响应是:

{
    "data": {
        "app_id": 138483919580948, 
        "application": "Social Cafe", 
        "expires_at": 1352419328, 
        "is_valid": true, 
        "issued_at": 1347235328, 
        "metadata": {
            "sso": "iphone-safari"
        }, 
        "scopes": [
            "email", 
            "publish_actions"
        ], 
        "user_id": 1207059
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为说Facebook更有可能引入重大改变是误导性的.他们没有在任何地方声明,他们的官方文档明确表示这是验证访问令牌的方法 (23认同)
  • 这里的主要问题是,如果数据来自客户端,使用me?access_token方法是完全错误的; 因为任何网站都可以捕获令牌,然后通过访问您的api使用它们来验证您的网站. (5认同)
  • OP想要检查与令牌相关联的用户ID./ me端点返回用户ID,但仅当访问令牌有效时(因为,毕竟,令牌用于确定要返回的*"我").所以,抓住/我并比较用户ID.必须记住,每个应用程序都有自己的特定用户ID,因此您无法将来自不同来源的ID与使用您自己的应用程序令牌获得的/我进行比较. (4认同)
  • 过去,文档可能会使用它来进行调试.但目前它表明这正是用例. (3认同)

小智 74

如果收到错误,您可以简单地请求https://graph.facebook.com/me?access_token=xxxxxxxxxxxxxxxxx,令牌无效.如果您获得具有id属性的JSON对象,则它是有效的.

不幸的是,这只会告诉您令牌是否有效,而不是来自您的应用.

  • 这不会检查access_token是否适用于您的应用. (49认同)
  • 如上所述请求https://graph.facebook.com/me?access_token=xxxxxxxxxxxxxxxxx,然后检查您所拥有的uid是否与请求中传回的id匹配. (13认同)
  • 对不起,我的问题不明确.问题是如何仅使用uid和accessToken验证用户.https://graph.facebook.com/100000726976284?access_token=xxxxxx例如,有没有简单的方法来检查用户100000726976284的访问令牌是否为xxxxxx.我想'验证'字段是关键.只有当我输入正确的xxxxxx时,我才能在响应中看到verify = true. (9认同)
  • downvoting,同意@EdSykes,这样你无法检查访问令牌是否属于你的应用程序https://developers.facebook.com/docs/facebook-login/security (4认同)

And*_*ndy 30

只是想让你知道,直到今天我首先获得了一个app访问令牌(通过GET请求到Facebook),然后使用收到的令牌作为app-token-or-admin-token:

GET graph.facebook.com/debug_token?
    input_token={token-to-inspect}
    &access_token={app-token-or-admin-token}
Run Code Online (Sandbox Code Playgroud)

但是,我刚刚意识到了一种更好的方法(需要少一个GET请求的额外好处):

GET graph.facebook.com/debug_token?
    input_token={token-to-inspect}
    &access_token={app_id}|{app_secret}
Run Code Online (Sandbox Code Playgroud)

作为Facebook的文档中描述的访问令牌这里.

  • 谢谢.其他人的注意事项:文字"|" 必须包含字符(不表示'或'),如链接到答案的页面所示:https://developers.facebook.com/docs/facebook-login/access-tokens#apptokens (3认同)

Nad*_*v B 5

简单请求(HTTP GET):

https://graph.facebook.com/USER_ID/access_token=xxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

就是这样。