Rails バックエンドで iPhone クライアントを構築しています。クライアントは、Oauth2 API を介してサーバーと通信します。これは、oauth2 と doorkeeper gem を使用して設定しました。
すべての API リクエストは、トークンとともに送信する必要があります。現在、2 つのトークン「タイプ」をサポートしています。
- クライアント: クライアント資格情報許可タイプを使用します。これは、アプリ全体のアセットやキーなどへのアクセスなど、ユーザー固有ではないリクエスト用です。
- ユーザー: パスワード認証資格付与タイプを使用します。このトークンを取得するには、クライアントは有効なユーザー名とパスワードの組み合わせを渡して要求する必要があります。すべてのユーザー要求は、このトークンを使用します。
これはすべて正常に機能していますが、ユーザーが Facebook を使用してアプリにログインすることも許可しているため、問題が発生しています。
ユーザーが FB にログインすると、クライアントは Facebook UID をサーバーに渡すことで応答します (クライアント トークンを使用)。次に、サーバーでいくつかのチェックを行い、この UID をデータベース内の既存のユーザーと照合します。
問題は次のとおりです。ユーザー トークンを使用してこのリクエストに応答したいと考えています。ユーザーがアプリにログインするため、このトークンが必要であり、その後のすべてのリクエストでこのトークンが必要になります。ただし、現在、これを行う唯一の方法は次のとおりです。
ユーザー名とパスワードで応答します。次に、パスワード資格情報フローに従って、クライアントにユーザー トークンの要求を行わせます。パスワードを渡しているので、これは好きではありません。また、複数回の旅行が必要です。
基本的な何かが欠けているような気がします。このフローを処理する別の方法はありますか?