我尝试在Java Google App Engine应用中使用Application Default Credentials。在本地运行时,凭据正常工作,以下示例代码按预期记录我的服务帐户ID和访问令牌。
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Literally one line of code for GAE credentials
GoogleCredential credential = GoogleCredential.getApplicationDefault();
LOGGER.log(Level.INFO, "Service Account Id: {0}", credential.getServiceAccountId());
LOGGER.log(Level.INFO, "Access Token: {0}", credential.getAccessToken());
}
但是,当运行在云中部署的确切代码时,日志如下:
16:03:58.585 com.test.servlet.MyServlet doGet: Service Account Id: null
16:03:58.681 com.test.servlet.MyServlet doGet: Access Token: null
为什么应用程序默认凭据在云中为空?我缺少一些配置吗?根据{{3}},这应该会自动生效:
如果您需要在Google App Engine上运行代码,则应使用应用程序默认凭据(ADC)。使用ADC的客户端库在运行时自动从App Engine获取内置服务帐户凭据。