我在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文件时解决这个问题(它还涉及更少的代码)。
感谢。
答案 0 :(得分:1)
目前,我只使用此处概述的p12文件:
https://developers.google.com/admin-sdk/directory/v1/guides/delegation
如果有人知道使用json文件在这个问题中执行代码的方法,请随时评论/回答。
答案 1 :(得分:1)
由于不支持JSON凭据serviceAccountUser我已完成解决方法:制作凭证副本。
答案 2 :(得分:1)
根据this answer to a related question的建议,包括sub
(主题,我认为),表明您的Google Apps帐户中委派管理员的电子邮件地址是API调用工作的必要步骤。委派管理员也可能需要被授权访问/修改您正在呼叫的数据或端点。由于我的经验是PHP客户端,而不是Java,我不知道如何将这个电子邮件地址提供给您的示例中使用的Java类。
答案 3 :(得分:0)
以下是通过使用JSON文件设置管理员电子邮件的解决方案:
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.admin.directory.Directory;
import com.google.api.services.admin.directory.DirectoryScopes;
import static com.google.api.client.googleapis.util.Utils.getDefaultJsonFactory;
import static com.google.api.client.googleapis.util.Utils.getDefaultTransport;
// ...
String ADMIN_EMAIL = "admin@company.com";
String jsonConfigFile = "/GSuite Integration.json";
List<String> scopes = Arrays.asList(DirectoryScopes.ADMIN_DIRECTORY_USER, DirectoryScopes.ADMIN_DIRECTORY_USERSCHEMA_READONLY);
GoogleCredential credential;
try (InputStream is = CredentialsWorkaroundTest.class.getResourceAsStream(jsonConfigFile)) {
credential = GoogleCredential.fromStream(is)
.createDelegated(ADMIN_EMAIL)
.createScoped(scopes);
}
Directory service = new Directory.Builder(getDefaultTransport(), getDefaultJsonFactory(), credential)
.setApplicationName(APPLICATION_NAME)
.build();
(不需要整个域的授权)
注意-使用 google-api-client 版本1.28.0