是否有可能解密Facebook的新OAuth 2.0访问令牌?
我需要以某种方式从访问令牌中获取user_id和app_id。
PS:
我只需要从访问令牌中获取user_id和app_id,就像Facebook Linter曾经做过的那样。
正如其他人所指出的那样,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
。
https://graph.facebook.com/me?fields=id&access_token=xxx
,我会得到以下结果:{ "error": { "type": "OAuthException", "message": "Error validating application." } }
- glarkouaccess_token
调用将没有失败的原因。否则,该令牌将是完全无用的。您是否能够使用您的令牌来实际执行任何操作? - kongo09access_tokens
的。你有指定你的应用程序是画布应用程序吗?在提供的示例中,你使用的是来自Graph Explorer而不是常规Canvas应用程序的访问令牌,对吧?我刚刚尝试了一下通过Graph API explorer从常规应用程序获取access_token
,它可以工作。但是给出的access_token
与https://developers.facebook.com/apps/上显示的特定应用程序的`access_token`不同。所以你可能是正确的。它应该可以工作。 - glarkou/me?fields=id
将返回用户ID,或者您可以使用https://developers.facebook.com/tools/debug上的调试工具来调试访问令牌的其他属性。"message": "The access token could not be decrypted",
。 - evandrixhttps://graph.facebook.com/me?access_token=<access_token>
如果您仔细查看访问令牌本身,这实际上是一个非常简单的任务。它由3个段组成,由管道字符|
分隔:
APP_ID|SOME_STUFF.NUMBER-USERID|SOME_MORE_STUFF
我不确定SOME_STUFF
,NUMBER
和SOME_MORE_STUFF
是什么;可能是时间戳、签名或其他编码数据,Facebook使用它们来跟踪access_token的有效性等。
除非你是通过不当手段获得了相关的access_token,否则我认为从中访问APP_ID和USER_ID并没有问题(显然Facebook也是这样认为的)。所以我只想说要负责任 :)
另一件事需要记住的是,这并不是一个标准或任何东西,并且可能会发生改变。所以也要注意这一点。
access_key
就毫无意义了;你可以试着去http://crypto.stackexchange.com/问问。 - jches没有公开的方法可以解密访问令牌以获取用户ID和应用程序ID。这很可能也是违反Facebook政策的严重漏洞。
首先,要获得访问令牌,您必须已经拥有用户和应用程序ID的访问权限,因此您不应该需要这样做。如果您实际上没有访问用户或应用程序ID,则我的猜测是您可能甚至不应该拥有他们的访问令牌,并且可能已经“非法”地获得了它...
你不需要解密访问令牌
就AppID而言,当你在Facebook上创建应用程序时,你应该从那里获取它,这是连接到Facebook的ID。
Facebook会随着访问令牌一起发送userId。 只需检查浏览器中的cookie或在oauth情况下检查请求访问令牌时返回的整个字符串即可。
app_id
来获取access_token
,并且可以通过访问Graph API URL/me/
来从access_token
中获取user_id
。有没有不尝试解密access_token
就无法获得您想要的数据的原因? - jchesuser_id
和app_id
是access_token
的先决条件,因此反转这一点是没有意义的。正如其他人所概述的那样,只要令牌有效,您可以随时进行简单的API调用以检索相关的user_id
。如果令牌不再有效,则您将无法使用它。 - kongo09access_token
和传递给你的应用程序的signed_request
混淆了。必须对 signed_request 进行解码,只有当用户已登录并授权您的应用程序访问其帐户时,signed_request 才包含access_token
。如果存在用户会话,则 signed_request 还包含 'user_id'。signed_request 仅在初始 POST 加载中的画布上下文中可用,在此处,您的应用程序正在 Facebook iframe 中加载。 - qodeninja