我正在尝试使用Google Admin API获取和更新我的域用户。
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final List<String> SCOPES = Arrays.asList(
"https://www.googleapis.com/auth/admin.directory.user",
"https://www.googleapis.com/auth/admin.directory.user.readonly");
public static void main(String[] args) {
try {
HttpTransport httpTransport = new NetHttpTransport();
GoogleCredential credential =
new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(
"xxxxx-yyyyy@developer.gserviceaccount.com")
.setServiceAccountUser("superadmin@mydomain.com")
.setServiceAccountScopes(SCOPES)
.setServiceAccountPrivateKeyFromP12File(
new File("C:\\privatekey.p12")).build();
Directory admin =
new Directory.Builder(httpTransport, JSON_FACTORY, credential)
.setApplicationName("User Sync Service")
.setHttpRequestInitializer(credential).build();
Directory.Users.List list = admin.users().list();
Users users = list.execute();
System.out.println("************");
} catch (Exception e) {
e.printStackTrace();
}
}
从我的Google控制台
但我仍然收到此错误
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "access_denied"
}
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:269)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:858)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
更新 ManageOath的屏幕截图
答案 0 :(得分:3)
看起来文档对客户和域名有些含糊不清。必须指定一个或另一个。使用list()函数时,可以设置customer
属性。它应该设置为客户的ID(一个独特的,随机的字符串),或者,如果您已经在Google Apps实例中作为管理员进行身份验证,则只需指定customer=my_customer
即可。或者,您可以指定domain=example.com
,其中example.com是Google Apps实例中的主域或辅助域。指定域时,只有在该域中具有主(主)地址的用户才会在结果中返回。指定客户时,将返回Google Apps实例中的所有用户。
您可以使用Google API Explorer进行确认。将客户留空始终会导致错误。但是,为客户属性设置my_customer
应修复它。
答案 1 :(得分:1)
您需要指定域或客户参数:
Directory.Users.List list = admin.users().list()
.setDomain("<target_domain>");
// or
Directory.Users.List list = admin.users().list()
.setCustomer("<target_customer_id>");
我提交了一个错误来更新文档,以明确这两个参数中至少有一个是必需的。
答案 2 :(得分:0)
继续https://admin.google.com/ yourdomain / ManageOauthClients,并检查是否为您的xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com服务帐户ID添加了这些范围。