今天早些时候,我们网络应用程序的 Facebook 登录流程对某些用户停止工作。当我们尝试获取当前配置文件时,会返回一个错误。它声称我们刚刚通过将用户重定向到 OAuth 登录流程而生成的访问 token 已被拒绝。
给出的原因是:
The access token is invalid since the user hasn't engaged the app in longer than 90 days
对我来说,这没有意义,因为我们不会将访问 token 存储在当前 session 以外的任何地方,并在用户每次使用 Facebook 登录时重新创建它。
GET/me
调用的 Spring Social 堆栈跟踪如下所示:
ERR c.s.f.v.resource.AuthenticationResource Exception when connecting with Facebook
org.springframework.social.RevokedAuthorizationException: The authorization has been revoked. Reason: The access token is invalid since the user hasn't engaged the app in longer than 90 days.
at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:85)
at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:59)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:775)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:728)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:702)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:350)
at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:220)
at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:215)
该问题可能与 changes in the Facebook API 有关,但我看不出这会如何影响我们在每次登录时创建的短期访问 token 。
最佳答案
当我们的集成测试使用测试用户登录时,我遇到了这个问题 - 以下 JSON 从 Graph API 返回:
{
"error": {
"message": "The access token is invalid since the user hasn't engaged the app in longer than 90 days.",
"type": "OAuthException",
"code": 190,
"error_subcode": 493,
"fbtrace_id": "F/1z2AsTRx8"
},
"timestamp_microsecond": "2018-05-30 11:22:01.353949"
}
这是一个更大的问题,因为我们的测试用户不会像这样“参与”应用程序。要解决这个问题,我必须:
- 登录 FB 开发者网站
- 找到有问题的应用
- 在角色下查看 -> 测试用户以找到正确的用户
- 单击用户的“编辑”按钮,然后单击“以此测试用户身份登录”
- 登录后,转到“设置”->“应用程序和网站”
- 在用户超过 90 天未与之交互的应用的“已过期”选项卡中查找该应用
- 点击过期应用上的“查看和编辑”按钮
- 在弹出窗口中点击“更新访问权限”
完成所有这些步骤后,我的测试用户(和集成测试)再次工作。
关于Facebook Graph API 拒绝新创建的访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50124462/