8

サーバー側のコンポーネントに対してユーザーを認証するためにデバイスで利用可能なGoogleアカウントを使用するAndroidアプリを開発しています。

Googleアカウント名(Gmailアドレス)をサーバーに送信しますが、サーバー上のgoogleで確認できるようにするために、Androidデバイスでoauthトークンをリクエストし、サーバーにも送信します。

問題は、追加のユーザー情報にアクセスする必要はありませんが、確認ダイアログを開くoauth電子メールスコープを使用する必要があることです。アカウント名がユーザー情報にアクセスしていないことを確認するため、このダイアログは好きではありません。

ありますがAccountManager.getPassword(account)、通信したり、ユーザーパスワードを使用したりするのは好きではありません。

WebViewを使用して、Webアプリのようにユーザーを認証することも可能です(たとえば、OpenIdを使用)が、デバイス上で最適なソリューションではないようです。

サーバー上のデバイスアカウント名を確認する他の/より良い方法はありますか?

4

4 に答える 4

3

AccountManagerまたはGooglePlayサービスを使用して、ユーザープロファイルのOAuth2トークンを取得します(スコープ:https ://www.googleapis.com/auth/userinfo.profile )。次に、Googleエンドポイント(https://accounts.google.com/o/oauth2/tokeninfo)を使用して確認し、オプションでユーザー情報を取得します。サンプルアプリはここにあります:http://oauthssodemo.appspot.com。あなたは似たようなことをしているようです。もしそうなら、これが正しい(または少なくとも推奨される)方法です。ところで、アカウントプロバイダーと同じ証明書で署名されていないため、ユーザーパスワードを取得できません。

これを行う他の(信頼できる)唯一の方法は、ランダムなトークンを使用してユーザーにGMailアドレスにメールを送信し、アプリに入力させることです。これにより、彼らが電子メールにアクセスできることを確認できるので、それは彼らのものでなければなりません(もちろん、彼らが他の誰かのデバイスを盗んだ場合を除きます)。

または、ユーザーがデバイスにアカウントを登録している場合、デバイスをアクティブ化するときに少なくとも1回認証されているため、実際にはそのアカウントであると単純に信頼できます。次に、Gmailアドレスをそのまま使用します。これは、アプリにとって十分な場合と不十分な場合があります。

于 2012-10-12T07:03:14.677 に答える
2

有効なトークンがないと、Googleアカウントを確認することはできません。以下の公式Androidドキュメントを参照することをお勧めします。

http://developer.android.com/training/id-auth/index.html

于 2012-10-10T02:19:03.390 に答える
1

私はこれを提案します:

  • デバイス上

    1. アカウントを選択します(メールアドレスを取得します)

    2. OAuthトークンをリクエストする

  • メールとトークンをサーバーに送信します

  • サーバー上

    1. GoogleのAPIを使用して、トークンから基本的なユーザー情報を取得します

    2. Googleから返されたメールアドレスと受け取ったメールアドレスを比較します

于 2012-10-13T21:50:22.850 に答える
1

この記事では、検証プロセスの詳細(ソースコード付き)について説明します。

TimBrayによるAndroidアプリからのバックエンド通話の確認

短いバージョン:Google Playサービスを通じて利用できるGoogleAuthUtilクラスを使用して、「IDトークン」と呼ばれる文字列を取得します。トークンをバックエンドに送信すると、バックエンドはトークンを使用して、トークンを送信したアプリとそのアプリを使用していたユーザーをすばやく安価に確認できます。

この記事の情報を使用すると、クライアント側とサーバー側のAndroidおよびJavaEEコードを簡単に実装できました。

于 2014-11-08T09:51:35.117 に答える