web-dev-qa-db-ja.com

サービスアカウントJSONを使用してGoogleCredentialを作成する方法

Java SDK for _Android Publisher v2_および_Oauth2 v2_を使用しています。サービスアカウントを作成すると、クライアントに_Google Play Android Developer_サービスアカウントのJSONが提供されましたID、メール、プライベートキーなど。AndoirdPublisherサービスを使用して自分のAndroidアプリのユーザーのサブスクリプション、資格など)の情報を取得できるように、認証情報の作成方法を調べて理解しようとしました。この情報をバックエンドサーバーに保存します。

私はこれをどうやってやるかを理解しようとするのに苦労しています。これまでに見たどのドキュメントも、ダウンロードしたJSONを使用してGoogleCredentialを作成するのに役立ちません。

たとえば、これは documentation ですが、JSONではなくP12ファイルについてのみ言及しています。複数のクライアントがあり、このJSONをある種のデータベースに保存し、それを使用して各クライアントの資格情報を作成したいので、可能であればP12を避けたいです。

ここで説明するように、GoogleCredentialオブジェクトを作成しようとしていることを明確にするために、

_import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.sqladmin.SQLAdminScopes;

// ...

String emailAddress = "[email protected]";
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId(emailAddress)
    .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12"))
    .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
    .build();
_

しかし、P12ファイルを使用してサービスアカウントをsetServiceAccountPrivateKeyFromP12File()のように設定するのではなく、サービスアカウントを作成したときに生成された同じ情報と生成されたJSONを使用したいと思います。

17
Chantz

私はgithubのGoogleCredential自体のソースコードを掘り下げることでこれを解決することができました(現在は here にあります)。

私のコードに存在していたgoogle-api-Java-clientのバージョンの日付が少し古いことが判明しました。私はそれを最新のものにアップグレードしました1.20.0&GoogleCredentialを作成するために作成されたJSONオブジェクトを直接指定できるようになりました。 Googleがドキュメントを更新してくれるといいのですが。

これがコードスニペットです。

InputStream resourceAsStream = AuthTest.class.getClassLoader().getResourceAsStream("Google-Play-Android-Developer.json");

GoogleCredential credential = GoogleCredential.fromStream(resourceAsStream);

とても簡単です。

27
Chantz