是否可以解密Facebook的新OAuth 2.0 access_token?
我需要以某种方式从access_token获取user_id和app_id。
PS:
我需要从Facebook Linter过去的access_token中获取user_id和app_id。
答案 0 :(得分:18)
正如其他人已经指出的那样,access_token
是一个唯一的随机字符串,所以它不能被解密。此外,我们都知道user_id
和app_id
是首先生成令牌的先决条件。
但是,我们假设您将令牌存储在数据库中并丢失了关联的user_id
和app_id
。在这种情况下,如何检索只有手头的令牌是一个有效的问题。如果您的令牌仍然有效,则可以这样做。如果它已过期,那你就不走运了。
要检索 user_id
,请致电:
https://graph.facebook.com/me?fields=id&access_token=xxx
要检索 app_id
,请致电:
https://graph.facebook.com/app?fields=id&access_token=xxx
在这两种情况下,无论access_token
是加密的还是未加密的,相关的id都将成为JSON响应的一部分。
让我们用一个例子来说明这一点。我们假设马克扎克伯格使用Graph API Explorer生成access_token
。调用/me
端点可以为您提供:
{
"id": "68310606562"
}
并调用/app
端点为您提供:
{
"id": "145634995501895"
}
您正在寻找的ID是响应的一部分。
请注意https://developers.facebook.com/apps上显示的access_token
无法使用(不确定这是Facebook的错误还是故意的)。请使用您的应用通过OAuth收到的access_token
。
答案 1 :(得分:2)
如果访问令牌采用加密格式,则无法以编程方式确定用户ID和应用程序ID。
我很难想到一种合法的方式,你可以遇到一个访问令牌而没有这两条信息,因为你可能知道你自己的App ID和你存储访问令牌的用户ID。
尽管如此,假设有一个合法的用例:
对/me?fields=id
的调用将返回用户ID和/或您可以使用https://developers.facebook.com/tools/debug处的调试工具来调试访问令牌的其他属性
答案 2 :(得分:0)
通常,您使用access_token访问应用程序中的其他数据。例如,您的应用程序将对用户进行身份验证,然后使用访问令牌访问FB API中的其他功能,例如图表:
https://graph.facebook.com/me?access_token=<access_token>
答案 3 :(得分:0)
没有公开的方法来解密访问令牌以获取用户ID和应用ID。这也很可能是对Facebook政策的严重违反。
要获得访问令牌,首先您必须有权访问用户和应用程序ID,因此您不需要这样做。如果您实际上无法访问用户或应用程序ID,那么我的猜测是您可能甚至不应该拥有其访问令牌并且可能已经“非法”获取它......
答案 4 :(得分:0)
如果仔细查看访问令牌本身,这实际上是一项非常简单的任务。它由3个段组成,由管道符|
:
APP_ID|SOME_STUFF.NUMBER-USERID|SOME_MORE_STUFF
我不确定SOME_STUFF
,NUMBER
和SOME_MORE_STUFF
是什么;可能是时间戳,签名或其他编码数据,Facebook用来跟踪access_token的有效性等。
除非您通过fowl手段获得了有问题的acces_token,否则我看不到能够从他们访问APP_ID和USER_ID的问题(显然,Facebook也没有)。所以我要说的就是负责任:)
要记住的另一件事是,这不是标准或任何东西,并且可能会发生变化。所以,也要注意这一点。
答案 5 :(得分:0)
您不必解密accessstoken
就AppID而言,你应该从facebook那里得到它,你在那里制作应用程序,它是你连接到facebook的ID。
facebook发送userId以及accesstoken .. 只需在浏览器中检查您的cookie或在oauth情况下检查请求获取令牌时返回的整个字符串。
答案 6 :(得分:0)
您确定在这里谈论的是访问令牌而不是已签名的请求吗?
当您加载Facebook应用程序时,您有一个已签名的请求对象,其中包含我认为您正在寻找的信息(但如果用户未授权您的应用程序,则其用户ID将不在签名请求中,Facebook安全)
答案 7 :(得分:0)
目前可用的唯一方法是使用Facebook Access Token Lint Tool。 您可以考虑自动化该过程。