0

iPad アプリを Box と統合しようとしています。Box API で、あるユーザーのアカウントのファイルが別のユーザーに返されるという問題が発生しています。この問題を再現する手順は次のとおりです。

  1. このガイドで説明されているように、承認呼び出しを行い、アクセス トークンを取得します。ログインするために、Safari で Box ログイン ページを開いています。ユーザーがログインした後にアプリを開くリダイレ​​クト URL のカスタム URL スキームを指定しました。
  2. アクセス トークンを取得したら、ルート フォルダーの内容を一覧表示する呼び出しを行います。これは成功します。
  3. iPad からアプリを削除し、再構築します。
  4. 再びログイン プロセスに進みます (ステップ 1 と同様)。ただし、今回は別の Box アカウントを使用してログインします。今回は、新しいアクセス コードと OAuth トークンを取得します。
  5. 新しいトークンを使用してファイルを一覧表示する呼び出しを行うと、以前のアカウントから応答が返されます。理想的には、現在許可されているユーザーのファイルを返す必要があります。

Box は応答を返すために OAuth のみを使用しますか? それとも Cookie も使用しますか? 認証してアクセス トークンを受け取った後、Box からの Cookie も表示されるためです (を使用して検証[[NSHTTPCookieStorage sharedStorage] cookies])。

認証フローを開始する前に、すべての Box Cookie を削除して、上記のプロセスを繰り返してみました。また、OAuth トークンをディスクに保存して取得していません。私は決して応答を保存/キャッシュしていません。

もう 1 つ気づいたことは、Safari では一度に 2 人の Box ユーザーがログインできることです。また、認証要求を行い、アクセス トークンを取得してから再度認証要求を行うと、(アクセスの許可/拒否ページを表示する代わりに) ログイン ページが再度表示されます。これは意図的なものですか?

Box v2 API と iOS 5/6 を使用しています

4

1 に答える 1

0

さらに調べてみると、問題は Box サーバーの応答のキャッシュにあるようです。iPad アプリから作成された 2 つの異なるアクセス トークンを使用して、curl で簡単なテストを行いました。両方のトークンを使用して、ルート フォルダーのユーザー ファイルをフェッチする呼び出しを行いました。結果は正しかった。つまり、各アカウントの正しいファイルを取得した。

iPad アプリで同じテストを行ったところ、あるユーザーのファイルが別のユーザーに返されました。2 回のログインの間にかなりのギャップを維持していれば、正しいファイルを取得できました。

これを恒久的に修正するために、ユーザーのファイルを取得するリクエストのCache-Controlヘッダーをに設定しています。no-cache

しかし、私がこれをしなければならないのは奇妙です。Box はキャッシュ検証ロジックの IMHO を確認する必要があります。

于 2012-12-26T11:02:08.703 に答える