1

我已经为 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 片段,因为例如 renewAccessToken-Method 在下午 2 点工作。这可能是 Withings 后端的错误配置(我认为他们使用 GuzzleHTTP,因为在向我的服务器发送通知时在他们的用户代理中说明了这一点)?他们不会向他们提供的合作伙伴电子邮件 ( http://developer.withings.com/oauth2/#tag/FAQ ) 回复电子邮件。

4

1 回答 1

0

刷新/初始注册后,“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。

于 2019-08-14T12:55:54.147 回答