【发布时间】:2016-12-24 23:41:45
【问题描述】:
我在 java web 应用程序中使用以下代码来尝试获取组的所有用户:
GoogleCredential credential = GoogleCredential.fromStream(Util.class.getResourceAsStream("[credential_file].json")).createScoped(SCOPES);
Directory directory = new Directory.Builder(httpTransport, JSON_FACTORY, credential).build();
Directory.Members dirMem = directory.members();
Members members = dirMem.list("[group_email]").execute();
这会导致最后一行 (dirMem.list...) 出现异常 403(未授权访问此资源/API)。
从文档 (https://developers.google.com/admin-sdk/directory/v1/guides/delegation) 和其他帖子中,我看到解决方案是使用setServiceAccountUser() 设置服务帐户用户。
但是,这意味着我必须使用 p12 文件而不是 json 文件(Google 建议您在创建密钥时使用 json 文件)。
有什么办法可以在使用 json 文件的同时解决这个问题(它还涉及更少的代码)。
谢谢。
【问题讨论】:
-
您可以使用服务帐户 json 密钥文件而不是 P12 服务帐户 json 密钥文件。记住服务帐号验证码和 Oauth2 验证码是不同的。
-
谢谢。我确实尝试使用服务帐户密钥文件(按照此处的说明生成:developers.google.com/identity/protocols/…)。它包含字段:类型:“服务帐户”,project_id,private_key_id,private_key,client_email,client_id等。这不是正确的json密钥文件吗?还是我上面的代码中缺少什么?
-
听起来不错。您将不得不找到一个使用 json 文件而不是 p12 文件的示例。请记住,服务帐户需要获得授权才能访问数据。确保您将其添加为 Google 域上的用户。注意:我不是 Java 程序员,也无权访问 Google 域。对不起,我只能给你提示。
标签: google-api google-api-java-client google-admin-sdk google-oauth