GCEでJavaアプリケーションを実行しています。このインスタンスからGoogle Cloud Credentialsを自分のアプリケーションで使用しようとしています。 GCEで実行すると、アプリケーションのデフォルト資格情報を使用していても、戻された資格証明はインスタンス資格証明ではありません。これは、その全体が私のコードです:GoogleCredential.getApplicationDefault()がGCEインスタンスの認証情報を返しません。
package test;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.util.Utils;
import com.google.api.client.http.HttpTransport;
import java.util.Arrays;
public class Test {
public static void main(String[] args) throws Exception {
HttpTransport transport = Utils.getDefaultTransport();
GoogleCredential credential = GoogleCredential.getApplicationDefault(transport, Utils.getDefaultJsonFactory());
credential = credential.createScoped(Arrays.asList("https://www.googleapis.com/auth/userinfo.email"));
System.out.println(credential.getServiceAccountId());
}
}
私のGradleファイル:
repositories {
mavenCentral()
}
apply plugin: 'java'
apply plugin: 'application'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
project.mainClassName = 'test.Test'
dependencies {
compile group: 'com.google.api-client', name: 'google-api-client', version: '1.22.0'
}
私は:assembleDist
Gradleのターゲットを使用して配布にこれを構築しました。アセンブリされたディストリビューションをGCEインスタンスにコピーしました。 gcloud auth list
の結果は次のとおりです。私は自分のコードを実行すると
Credentialed Accounts:
- ##########[email protected] ACTIVE
To set the active account, run:
$ gcloud config set account `ACCOUNT`
、出力は次のようになります。
java -jar test-1.0-all.jar
null