2017-03-18 2 views
1

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 

答えて

0

「userinfo.email」スコープは、マシン上に存在しなかったことを何の問題。このスコープは、インスタンス作成時に「クラウドAPIへのフルアクセスを許可する」を選択した場合には表示されません。 Googleの最後のバグのようだ。

関連する問題