我正在处理应该安装在Google App Engine中的产品。
在此我使用服务帐户验证Gmail API,Drive API,Calendar API等。
下载的P12文件作为身份验证正常运行。但作为其产品,我不希望客户端在每次安装时都在应用程序上下载和上传。
有没有办法可以在没有privatekey文件的情况下对其进行身份验证,或者在没有服务帐户的情况下使用该API。
在下面的页面中,它提到系统管理的密钥对由Google自动管理。有用吗?我没有找到任何例子。
https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts.keys
在下面的链接中,它表明对于Google Cloud Platform,我应该使用Google Managed Key https://cloud.google.com/iam/docs/understanding-service-accounts
此密钥可以在没有下载文件的情况下使用吗?
由于
答案 0 :(得分:1)
我可以通过IAM API实现它 https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts.keys
下面是它的Java代码
private UUID getClientID(String username) {
try {
String query = "SELECT id FROM `client_table` WHERE username = ?";
stmt = connection.prepareStatement(query);
stmt.setString(1, username);
ResultSet rs = stmt.executeQuery();
System.out.println(rs.next());
return UUID.fromString(String.valueOf(rs.next()));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
任何密钥都可用于生成GoogleCredential,如下所示
AppIdentityCredential credential = new AppIdentityCredential(
Arrays.asList("https://www.googleapis.com/auth/cloud-platform"));
Iam iam = new Iam(httpTRANSPORT, jsonFACTORY, credential);
try {
Iam.Projects.ServiceAccounts.Keys.Create keyCreate = iam.projects().serviceAccounts().keys()
.create("projects/myProject/serviceAccounts/myProject@appspot.gserviceaccount.com", new CreateServiceAccountKeyRequest());
ServiceAccountKey key = keyCreate.execute();
} catch (IOException e) {
System.out.println(e.getMessage());
}