Facebook OAuthException:无法解密访问令牌

时间:2012-05-24 17:28:57

标签: php facebook facebook-graph-api

我有一个正在运行的应用程序,代表用户为他们的一个朋友安排预定的墙贴。

该应用程序运行良好已有一段时间,但最近安静了一些用户报告邮件未发布。

日志显示

OAuthException: The access token could not be decrypted. 

即使用户重新访问应用程序并重置其访问令牌,该异常仍然存在。

错误的根源和解决方法可能是什么?

5 个答案:

答案 0 :(得分:9)

如果在向Facebook API发出HTTP请求时收到以下错误消息:

{
  "error": {
       "message": "The access token could not be decrypted",
       "type": "OAuthException",
       "code": 190
  }
}

这意味着当您发出HTTP请求时,您发送到Facebook的访问令牌 NOT 有效。

如果您查看 HTTP响应标题,您会看到如下字段:

WWW-Authenticate:OAuth "Facebook Platform" "invalid_token" "The access token could not be decrypted"

我收到了上面的错误,因为我发送的访问令牌比有效签名短1个字符 在将持久访问令牌与我发送的访问令牌进行比较后,我发现了这个错误。

您可以使用Access Token Debugger检查Facebook上使用的OAuth 2.0访问令牌(持有人令牌)的有效性。

答案 1 :(得分:3)

Facebook令牌的大小不断增加,并且不再限制为255个字符,因此如果您使用大小有限的变量或数据库字段,则存储它们的方式可能会导致异常。

这在此Facebook文档的最后一部分中指定:https://developers.facebook.com/docs/facebook-login/access-tokens

  

尺寸

     

期望所有类型的访问令牌的大小随着时间的推移而变化,因为Facebook会对存储在其中的内容及其编码方式进行更改。您可以预期它们会随着时间的推移而增长和缩小。请使用不带特定最大大小的可变长度数据类型来存储访问令牌。

例如,如果在SQL中存储令牌,则可以避免使用VARCHAR并使用TEXT或BLOB代替

答案 2 :(得分:2)

这可能是因为在保存在数据库之前的令牌修剪。或字段大小小于令牌包机大小。在{variable}表中检查一次是否有正确的令牌。

答案 3 :(得分:0)

在我的情况下,这是由于当我向“我”发出请求时,accessToken不包含userID(我假设,尝试从令牌中确定用户ID)。

令牌调试器响应:

App ID: 
<ID> :   <app>
User ID: Unknown
Issued:  Unknown
Expires: 1339171200 (in about an hour)
Valid:   True
Origin:  Web
Scopes: 

为了解决问题,我没有请求“我”,而是直接从authResponse请求了userID的配置文件。

答案 4 :(得分:0)

当访问令牌长度不正确时,通常会发生此错误。验证令牌的格式。