GoogleドライブAndroid APIを使用して、ユーザーがAndroid搭載端末のGoogleドライブから自分のサーバーにファイルをアップロードできるようにします。 この設定を変更して、サーバーがCross Client Authorizationを使用してユーザーのGoogleドライブに直接アクセスできるようにしたいとします。つまり、GoogleAuthUtil.getToken
を使用してID Token
を生成する必要があります。そして、これはすべてが軌道から外れることです。このトークンを生成するには、Account
オブジェクトが必要です。GoogleドライブAndroid APIとクライアント間の認証
現在、私はこのようなGoogleApiClient
設定してい:
mGoogleApiClient = new GoogleApiClient.Builder(getContext())
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
これは素晴らしい作品を、すべての今して、ユーザがと接続するためにアカウントものを選択することができ、アカウントピッカーを示しています。すべてがフレームワークによって管理されます。しかし、ユーザーが接続を選択したAccount
にアクセスする方法はありません!
代わりに、私が使用して、それを自分自身を管理する必要があります。
Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"},
false, null, null, null, null);
startActivityForResult(intent, RC_ACCOUNT_PICKER);
そしてonActivityResult
に私が使用して、選択したアカウントを取得することができます
Account account = new Account(intent.getExtras().getString(AccountManager.KEY_ACCOUNT_NAME),
intent.getExtras().getString(AccountManager.KEY_ACCOUNT_TYPE));
そして今、私はAccount
オブジェクトを持っているので、私はそれを使って明示的に接続できます:
mGoogleApiClient = new GoogleApiClient.Builder(getContext())
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.setAccountName(mAccount.name) // Account name!
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
これは私の唯一のoptioですか? n、私の最初のソリューションを使用してAccount
を選択する方法はありませんか?
-
使用して、私のID Token
を生成しようとすると後で、:
String scope = String.format("oauth2:server:client_id:%s:api_scope:%s",
"12345.apps.googleusercontent.com",
"https://www.googleapis.com/auth/drive.file");
String token = GoogleAuthUtil.getToken(getContext(), mAccount, scope);
を私はまだにもかかわらず、利用者からさらに別の権限を付与する必要がUserRecoverableAuthException
を取得しています私は接続時と同じアカウントと同じ認証範囲を使用しています。 そのすべてが処理されたら、同じコードをもう一度実行して、最後に私のID Token
を取得することができます。
-
私は根本的に誤解してきたものがあるか、これは、動作するようになっていますどのように実際にありますか?
私は質問をすることができますか?私が正しく理解していれば、 'GoogleAuthUtil.getToken'は依然としてリクエストがあっても安全に使えるということをブログのところでは'一般的に、あなたはAndroidクライアント上でREST API呼び出しをしない限り、GoogleAuthUtil.getTokenを使うべきではありません。 Androidアプリで直接呼び出されるREST API(サーバーなし) – BNK
IDトークンをローカルで使用したい場合は、おそらく[idトークンフロー](https://developers.google。シングルサインオンの利点を得るには、requestIdToken()を使用してください。 – ianhanniballake
しかし、この場合、GoogleAuthUtil.getTokenはまだ保護されていますか?さらに、「ユーザーのID、メールアドレス、名前、プロフィールの画像URL」を取得するためにのみ使用されるIDトークンは、Googleドライブ、YouTube、連絡先などの他のGoogle APIにはアクセスしません。 – BNK