0

数日前、Box トークンを保持する方法を尋ねました ( Box Android API での認証データの読み込み、保存、使用)。ここで、ユーザーが自分の Box アカウントにアクセスしたい場合、次のコードを使用して構成しますBoxAndroidClient

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

認証データを取得してからしばらくの間は正常に動作します。しかし、1時間ほど後に次のメッセージが表示されます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);

ある時点でトークンが無効になったのではないかと思いますが、更新できない理由と、短期間で更新された理由がわかりません。
これを防ぐために何ができますか?

4

2 に答える 2

1

ユーザーがログインしてアプリの許可を受け入れると、authorization_code を access_token と refresh_token に交換します (以下に示す応答)。トークンが無効になる理由は、access_token が 1 時間で期限切れになるためです。14 日間有効な refresh_token を別の 1 時間アクセス トークンと交換できます。これが、アプリに access_token と refresh_token の両方を保存して、ユーザーが 14 日以上後にアプリに戻った場合にのみ再認証が必要になるようにする理由です。

別の access_token に refresh_token を使用すると、常にそれぞれ (更新 + アクセス) がもう 1 つ返されます。

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

于 2013-07-06T19:21:25.033 に答える