在Google应用引擎

时间:2017-04-27 04:55:40

标签: google-app-engine google-api google-api-java-client google-authentication

我正在处理应该安装在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

此密钥可以在没有下载文件的情况下使用吗?

由于

1 个答案:

答案 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());
}