我有一个正在运行的应用程序,它代表用户向他们的一位朋友发送预定的墙贴。
该应用程序在很长一段时间内运行良好,但最近一些用户报告消息未发布。
日志显示
OAuthException: The access token could not be decrypted.
即使用户重新访问应用程序并重置其访问令牌,异常仍然存在。
错误的根源和解决方法可能是什么?
我有一个正在运行的应用程序,它代表用户向他们的一位朋友发送预定的墙贴。
该应用程序在很长一段时间内运行良好,但最近一些用户报告消息未发布。
日志显示
OAuthException: The access token could not be decrypted.
即使用户重新访问应用程序并重置其访问令牌,异常仍然存在。
错误的根源和解决方法可能是什么?
如果您在向 Facebook API 发出 HTTP 请求时收到以下错误消息:
{
"error": {
"message": "The access token could not be decrypted",
"type": "OAuthException",
"code": 190
}
}
这意味着您在发出 HTTP 请求时发送给 Facebook 的访问令牌无效。
如果您查看HTTP 响应标头,您将看到如下字段:
WWW-Authenticate:OAuth "Facebook Platform" "invalid_token" "The access token could not be decrypted"
我收到上述错误是因为我发送的访问令牌比有效令牌短 1 个字符。
在将访问令牌与我发送的令牌进行比较后,我发现了这个错误。
您可以使用Access Token Debugger检查 Facebook 上使用的 OAuth 2.0 访问令牌(不记名令牌)的有效性。
Facebook 令牌的大小正在增加,并且不再限制为 255 个字符,因此如果您使用大小有限的变量或数据库字段,存储它们的方式可能会导致异常。
这在此 Facebook 文档的最后一部分中指定:https ://developers.facebook.com/docs/facebook-login/access-tokens
尺寸
预计随着 Facebook 更改其中存储的内容以及它们的编码方式,所有类型的访问令牌的大小都会随着时间而变化。您可以预期它们会随着时间的推移而增长和缩小。请使用没有特定最大大小的可变长度数据类型来存储访问令牌。
例如,在 SQL 中存储令牌,您可以避免使用 VARCHAR 并改用 TEXT 或 BLOB
这可能是因为令牌在保存到数据库之前进行了修剪。或字段大小小于令牌章程大小。在 {variable} 表中检查一次以获取正确和完整的令牌。
在我的情况下,这是由于我向“我”发出请求时 accessToken 不包含用户 ID(我假设它试图从令牌中确定用户 ID)。
令牌调试器响应:
App ID:
<ID> : <app>
User ID: Unknown
Issued: Unknown
Expires: 1339171200 (in about an hour)
Valid: True
Origin: Web
Scopes:
为了解决这个问题,我没有请求“我”,而是请求了 userID 的配置文件,我可以直接从 authResponse 访问该配置文件。
当访问令牌长度不正确时,通常会发生此错误。验证令牌的格式。