我有一个正在运行的应用程序,代表用户为他们的一个朋友安排预定的墙贴。
该应用程序运行良好已有一段时间,但最近安静了一些用户报告邮件未发布。
日志显示
OAuthException: The access token could not be decrypted.
即使用户重新访问应用程序并重置其访问令牌,该异常仍然存在。
错误的根源和解决方法可能是什么?
答案 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)
当访问令牌长度不正确时,通常会发生此错误。验证令牌的格式。