java - 如何解决 Withings 开发者 API 刷新 token 在 4 小时内过期的问题?

标签 java server oauth-2.0 refresh-token withings

我已经为 Withings API 的 OAuth2 实现了 Java 接口(interface) ( http://developer.withings.com/oauth2/ )。最初,将处理从 Withings 后端发送到我的服务器的授权 token ( http://developer.withings.com/oauth2/img/OauthDiagram.jpg )。通过授权 token ,我成功获得了访问 token 和刷新 token 。反过来,使用访问 token 我可以从资源服务器获取实际数据。 刷新 token 可以成功用于获取新的访问 token ,但只能在大约 4 小时内完成。 http://developer.withings.com/oauth2/#tag/glossary 中的“刷新 token ”描述刷新 token 将“有效期为一年”。所以我不知道我的错在哪里。

这是日志的一个片段,其中该机制在下午 2 点工作,但在下午 6 点不工作。 下午 2 点左右,该应用被授予对 USER_ID 的用户数据的访问权限。

Aug 08, 2019 2:00:46 PM UserAccessData renewAccessToken
INFORMATION: Withings refresh access token request: grant_type=refresh_token&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&refresh_token=REFRESH_TOKEN&redirect_uri=REDIRECT_URI
Aug 08, 2019 2:00:46 PM UserAccessData renewAccessToken
INFORMATION: Withings refresh access token response: {"access_token":"ACCESS_TOKEN","expires_in":10800,"token_type":"Bearer","scope":"user.info,user.metrics,user.activity","refresh_token":"REFRESH_TOKEN","userid":USER_ID}
[...]
Aug 08, 2019 6:00:45 PM UserAccessData renewAccessToken
INFORMATION: Withings refresh access token request: grant_type=refresh_token&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&refresh_token=REFRESH_TOKEN&redirect_uri=REDIRECT_URI
Aug 08, 2019 6:00:46 PM UserAccessData renewAccessToken
INFORMATION: Withings refresh access token response: {"errors":[{"message":"invalid_grant: Invalid Params: invalid refresh_token"}]}
Aug 08, 2019 6:00:46 PM AccessTokenUpdaterTask run
SEVERE: UserAccessData of User with UserID USER_ID could not be renewed and refreshed properly

我不知道应该提供哪个 Java 片段,因为 e. G。 renewAccessToken 方法在下午 2 点运行。这可能是 Withings 后端的配置错误(我认为他们使用 GuzzleHTTP,因为在向我的服务器发送通知时在他们的用户代理中声明了这一点)?他们不会回复向其提供的合作伙伴电子邮件 ( http://developer.withings.com/oauth2/#tag/FAQ ) 发送的电子邮件。

最佳答案

刷新/初始注册后,“Withings 刷新访问 token 响应”中的 REFRESH_TOKEN

{"access_token":"ACCESS_TOKEN","expires_in":10800,"token_type":"Bearer","scope":"user.info,user.metrics,user.activity","re​​fresh_token":"REFRESH_TOKEN","userid":USER_ID}

在 4 小时内是相同的,但在这 4 小时后请求新的访问 token 时,也会更新并在该响应中发回。因此,在请求新的访问 token 时,必须保存该响应中的 ACCESS_TOKEN 和 REFRESH_TOKEN。

关于java - 如何解决 Withings 开发者 API 刷新 token 在 4 小时内过期的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57432065/

相关文章:

go - 将 AppleID 的公钥编码(marshal)为 rsa.PublicKey

java - @Transactional 方法调用 - 我们应该将对象作为参数传递吗?

java - 如何为从 Eclipse 运行的程序指定默认 JVM 参数?

java - 如何使用 path2d 绘制多边形并查看点是否在其区域内?

java - 无法从 Netbeans 中的 Mysql 检索数据

mysql - 通过Vba将Ms Access Db连接到Mysql

mysql - 配置 Apache 503 敏感度

php - 更好的是,在 android 中循环读取 php 或在 php 中循环读取数据库?

java - 如何处理 urn :ietf:wg:oauth:2. 0:oob redirect in Google Calendar API Authorization

node.js - Azure AD Oauth2 隐式授予多个范围