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

这是该机制在下午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-Method在下午2点工作。这可能是Withings后端的配置错误(我认为他们使用GuzzleHTTP,因为在向我的服务器发送通知时,在User-Agent中对此进行了说明)?他们不会对提供的合作伙伴电子邮件(http://developer.withings.com/oauth2/#tag/FAQ)回复电子邮件。

最佳答案

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

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

保持4小时相同,但是在这4小时之后请求新的访问令牌时,该响应也将被更新并发送回该响应中。因此,当请求新的访问令牌时,必须从该响应中保存ACCESS_TOKEN和REFRESH_TOKEN。

08-07 04:48