Facebook OAuthException:无法解密访问令牌

rah*_*810 11 php facebook facebook-graph-api

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

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

日志显示

OAuthException: The access token could not be decrypted. 
Run Code Online (Sandbox Code Playgroud)

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

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

bit*_*tek 9

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

{
  "error": {
       "message": "The access token could not be decrypted",
       "type": "OAuthException",
       "code": 190
  }
}
Run Code Online (Sandbox Code Playgroud)

这意味着访问令牌时,你的HTTP请求是要发送给Facebook 不是有效的.

如果查看HTTP响应标头,您将看到如下字段:

WWW-Authenticate:OAuth "Facebook Platform" "invalid_token" "The access token could not be decrypted"
Run Code Online (Sandbox Code Playgroud)

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

您可以使用访问令牌调试程序检查 Facebook上使用的OAuth 2.0访问令牌(承载令牌)的有效性.

  • 是的,在这里,只是一个非常愚蠢的"复制/粘贴"错误. (2认同)

小智 5

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

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

尺寸

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

例如,要在 SQL 中存储标记,您可以避免使用 VARCHAR 并使用 TEXT 或 BLOB 代替


Hol*_*est 0

就我而言,这是由于当我向“me”发出请求时,accessToken 不包含 userID(我假设它尝试从令牌确定 userID)。

令牌调试器响应:

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

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