GCP IAP Java示例返回ComputeEngineCredentials而不是ServiceAccountCredentials

时间:2018-10-01 15:51:25

标签: java google-app-engine google-cloud-platform google-iap

上下文

我在Google AppEngine Flexible环境中有一些服务通过API进行通信,并且在使用IAP来管理用户访问权限时。我必须使用Bearer JWT令牌以编程方式对每个服务进行身份验证。

问题

在我的Java应用程序中,我使用的是Google提供的用于验证IAP服务的代码,您可以在此处找到:https://cloud.google.com/iap/docs/authentication-howto#iap_make_request-java

问题出在以下代码块中:

GoogleCredentials credentials =
    GoogleCredentials.getApplicationDefault().createScoped(Collections.singleton(IAM_SCOPE));
// service account credentials are required to sign the jwt token
if (credentials == null || !(credentials instanceof ServiceAccountCredentials)) {
  throw new Exception("Google credentials : service accounts credentials expected");
}
return (ServiceAccountCredentials) credentials;

当代码需要一个createScoped响应对象时,ComputeEngineCredentials方法将返回一个ServiceAccountCredentials

欢迎所有建议。在此先感谢有史以来最伟大的社区。

1 个答案:

答案 0 :(得分:0)

您实际上并未提及所面临困难的性质。 在GCP项目中会自动创建App Engine灵活环境服务帐户。您是否尝试创建App Engine灵活环境服务帐户,该帐户与App Engine default service account是分开的服务帐户。 “返回(ServiceAccountCredentials)凭据;”语句使用强制转换返回ServiceAccountCredentials;应该没问题

行:GoogleCredentials.getApplicationDefault()。createScoped(Collections.singleton(IAM_SCOPE)创建一个GoogleCredentials对象,它不需要JSON服务帐户文件即可成功。