2016-07-18 11 views
0

私たちはアンドロイドアプリを持っており、それにいくつかのWebサービスを呼び出す必要があります。 バックエンドサービスは、ベアラ認可アルゴリズムで機能します。ユーザがログインすると、サーバは彼にアクセストークンを与え、このトークンは約1時間有効です。 サービスを呼び出すときに、このトークンをHTTPヘッダーとして送信します。トークンが有効であればOKです。トークンが有効でない場合、サーバーはエラーを返し、新しいトークンを取得し、この新しいトークンでそのサービスを呼び出すために別のサービスを呼び出す必要があります。 私の質問は、このワークフローを実装するパターンはありますか? この種のWebサービスコールに関するその他のアイデア。ここでは、高度なベアラー認可アルゴリズムに基づいてWebサービスを呼び出す

+0

を返す必要があります私はあなたのユースケースを理解することができますが、私は本当の問題が何であるかを作るように見えることはできません。あなたはあなたの質問を言い換えて、特定のことを聞くことに集中したいですか?実際には、この種の認証フレームワークは今日はかなり標準的です。通常はトークンを要求します。サービスはrefreshTokenとアクセストークンを返します。 'Refresh token'は、古いものが期限切れになったときに新しい' access token'を取り出すために使われます。認証時には、 'access_token'を使用して自分自身を識別するための認証が必要なサービスを呼び出します。 –

+0

@ SamuelToh私はデザインパターンが必要です。 Webサービス呼び出しの1つが失敗した場合に備えて、これを処理する方法が必要だと思います。多分私たちは単にこのサービスをそれぞれ呼び出すべきではないかと思います。 –

+0

この問題のデザインパターンはわかりません。私はあなたが外部のパーティのWebサービスのドキュメントを読んで、例外を適切に処理しなければならないと思う。例えば。アクセストークンが期限切れになったことを示す特定のHTTPコードとエラーを返す場合、コードは適切なトークンリフレッシュAPIを呼び出して、新しいアクセストークンでWebサービスを再試行する必要があります。あなたのソリューションは、外部パーティがエンドポイントと例外をどのように設計するかにかなり依存します。 –

答えて

0

おかげで、私は、以前の

  1. を実装したソリューションは、ユーザーのトークンを生成して保存しますこれ、あなたのWebサービスでの認証機能を記述しています。資格があればTOKENを返してください。
  2. あなたのAndroidアプリケーションにTOKENを安全に保管してください。
  3. 各Webサービス呼び出しの場合、すべてのWebサービスの呼び出し
  4. における主要な引数としてトークンを使用、トークンは、あなたはまた、ユーザーならば、ユーザー
  5. を識別するためにトークンを使用することができます データベース
  6. でチェックする必要があります(ポイントと同じなし1)他のデバイスからログインし、認証機能は、次に記憶を新たなトークンを生成し、それを返すべき
  7. 次に、新しいトークンは、Webサービスの呼び出しで動作します。古い認証されたデバイスは、「無効なトークン」
+0

トークンはメモリ/キャッシュ(MemCache/Redis)に存在する必要があります(データベースには存在しません)。トークンは頻繁にアクセスされるため、DBアクセスは遅延します。 –

+0

これは認証フレームワークのレイアウトです。また、すべてをキャッシュするためのInnoDBをトークンテーブルに使用することもできます。あなたがする必要があるのは、mysqlが使用するメモリを増やすことだけです。他のデータベースベンダーも、静的行読み取りのパフォーマンスを向上させる同様のテクニックを持っています。 Viswanathとして –

+0

@ChristlinJosephは私の次のプロジェクトは、トークンに基づいたシステムを必要とするので、あなたは、私たちにそれを行うには、別の最良の方法を伝えることができ、サーバは、サーバ –

関連する問題