我在GCE上运行Java应用程序。我正在尝试从此实例中获取Google Cloud凭据以在我的应用程序中使用。在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:
- ##########-compute@developer.gserviceaccount.com ACTIVE
To set the active account, run:
$ gcloud config set account `ACCOUNT`
当我运行我的代码时,输出是:
java -jar test-1.0-all.jar
null
答案 0 :(得分:0)
问题在于" userinfo.email"机器上没有范围。选择"允许完全访问Cloud API时,此范围将永远不存在。在实例创建期间。看起来像谷歌的一个错误。