我在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
。
欢迎所有建议。在此先感谢有史以来最伟大的社区。 p>
答案 0 :(得分:0)
您实际上并未提及所面临困难的性质。 在GCP项目中会自动创建App Engine灵活环境服务帐户。您是否尝试创建App Engine灵活环境服务帐户,该帐户与App Engine default service account是分开的服务帐户。 “返回(ServiceAccountCredentials)凭据;”语句使用强制转换返回ServiceAccountCredentials;应该没问题
行:GoogleCredentials.getApplicationDefault()。createScoped(Collections.singleton(IAM_SCOPE)创建一个GoogleCredentials对象,它不需要JSON服务帐户文件即可成功。