解密OAuth 2.0访问令牌

时间:2011-09-03 01:52:00

标签: facebook oauth-2.0

是否可以解密Facebook的新OAuth 2.0 access_token?

我需要以某种方式从access_token获取user_id和app_id。

PS:

我需要从Facebook Linter过去的access_token中获取user_id和app_id。

8 个答案:

答案 0 :(得分:18)

正如其他人已经指出的那样,access_token是一个唯一的随机字符串,所以它不能被解密。此外,我们都知道user_idapp_id是首先生成令牌的先决条件。

但是,我们假设您将令牌存储在数据库中并丢失了关联的user_idapp_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_STUFFNUMBERSOME_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。 您可以考虑自动化该过程。