为什么我试图访问Box后会出现异常?

时间:2013-07-06 17:34:23

标签: android box-api

前几天我问过如何保留Box令牌(Load, save and use of authentication data in Box Android API)。现在,当用户想要访问他的Box帐户时,我使用此代码来配置BoxAndroidClient

client = new BoxAndroidClient(C, S);
client.authenticate(loadAuth()); //loadAuth() returns BoxAndroidOAuthData object

获得认证数据后的短时间内效果很好。但是一小时后我得到了AuthFatalFailureException

07-06 17:21:01.841: W/System.err(3647): com.box.boxjavalibv2.exceptions.AuthFatalFailureException
07-06 17:21:01.841: W/System.err(3647):     at com.box.boxjavalibv2.authorization.OAuthDataController.doRefresh(OAuthDataController.java:275)
07-06 17:21:01.841: W/System.err(3647):     at com.box.boxjavalibv2.authorization.OAuthDataController.refresh(OAuthDataController.java:191)
07-06 17:21:01.841: W/System.err(3647):     at org.redscorpio.cloudtest.network.Box$2$1.run(Box.java:71)

第71行是

client.getOAuthDataController().refresh();

但每次我需要访问Box时都会发生这种情况:

client.getFoldersManager().getFolderItems(current.getId(), LIST_REQUEST()).getEntries();
client.getFoldersManager().getFolder("0", DEFAULT_REQUEST);

我怀疑我的令牌在某些时候无效,但我不知道为什么它不能续订以及为什么它会在这么短的时间后发生。
我能做些什么来阻止这种情况?

2 个答案:

答案 0 :(得分:1)

当用户登录并接受您的应用程序授权时,您将使用access_token和refresh_token(如下所示的响应)交换authorization_code。令牌无效的原因是access_token在一小时后到期。您可以将refresh_token(有效期为14天)与另一个一小时访问令牌进行交换。这就是为什么您希望应用程序同时存储access_token和refresh_token,以确保用户只需要在超过14天后返回应用程序时重新进行身份验证。

将refresh_token用于另一个access_token将始终返回一个(刷新+访问)。

{     “access_token”:“T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl”,     “expires_in”:3600,     “token_type”:“bearer”,     “refresh_token”:“J7rxTiWOHMoSC1isKZKBZWizoRXjkQzig5C6jFgCVJ9bUnsUfGMinKBDLZWP9BgR” }

答案 1 :(得分:1)

我不确定发生了什么。 sdk会自动刷新令牌。但是,每次刷新令牌时,您实际上将获得新的刷新令牌和新的访问令牌,旧的刷新令牌将不再有效。因此,基本上最简单的方法可能是每次api调用成功时更新存储的OAuth令牌对象。

与此同时,您是否可以仔细检查(可能添加一些记录)存储的刷新令牌和访问令牌是否是最新的? 您可以在令牌刷新代码中注销掉访问​​令牌: com.box.boxjavalibv2.authorization.OAuthDataController类,doRefresh()方法。 在api调用的地方:com.box.boxjavalibv2.authorization.OAuthAuthorization class,getAuthString()method。

相关问题