概要:Androidアプリケーションに保存されているGoogleアカウントを使用して、Rails 3 + Deviseアプリケーションによって提供されるAPIを使用して、ネイティブアプリケーションのユーザーを認証しようとしていますが、行き詰まります。
詳細:ユーザーがたくさんの友達からフィードバックを集めることができるアプリケーション(http://push-poll.com)があります。また、ネイティブのAndroidアプリケーションも構築しました。GoogleのウェブアプリではGoogleアカウントでログインできますが、その機能をネイティブのAndroidアプリに拡張したいと考えています。Webアプリは、Devise(アカウント権限用)+ Omniauth(Googleアカウント情報とOAuthインタラクション用)を使用してこれを実現します。
バージョン:Android 2.1以降、Rails 3.2.2、Devise 2.1.2、Omniauth 1.1.0
提案された認証ワークフロー:
- ユーザーがAndroidアプリケーションで「Googleアカウントでログイン」をクリックします
- ユーザーは、AccountManagerを使用してAndroidデバイスに保存されているアカウントを選択し、許可を与えます
- AndroidアプリはGoogleアカウントトークンをRailsAPIに送信します
- RailsアプリはアカウントトークンをGoogleOAuthAPIに送信します<-これは私が立ち往生しているところです
- Googleは成功とアカウント情報(具体的には、名前とメールアドレス)を返します
- Railsアプリはメールアドレスでユーザーを検索/作成します
- Railsアプリはユーザーアカウントからアクセストークンを作成/読み取り/更新します
- RailsアクセストークンはAndroidアプリに再調整されます(これは、現在、アプリが標準ログインでAPIアクセスを処理する方法です)
- Androidアプリでは、すべてのAPI呼び出しにRailsアクセストークンが含まれています
私はグーグルのドキュメンテーションを精査しました、しかし私は完全に(4)と(5)に固執しています。Googleが提供するメールアドレスを取得すると、すべてが現在と同じように機能します(標準ログインまたはGoogle / Omniauth / Deviseアカウントのいずれか)。私の推測では、これは次のいずれかで解決できます。
- GoogleアカウントAPIをリクエストするために、ウェブアプリと共有されるAndroidアプリのAPI/秘密鍵を作成します
- Google APIエンドポイントを見つけるAndroidアカウントトークンを認証して、アカウントの詳細を返すだけです
私は少なくとも一週間、これの壁に頭をぶつけてきました。
参考:私はウェブ開発者です。Android開発者は親切にも、Androidから選択したAPIエンドポイントにアクセストークンを送信するスタブアウトされたAndroidアプリを提供してくれました。