gpt4 book ai didi

java - 使用 Java 的 Google Admin SDK 用户访问 API

转载 作者:行者123 更新时间:2023-11-29 03:30:04 25 4
gpt4 key购买 nike

我正在尝试使用 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 控制台

enter image description here enter image description here

  1. API 访问已从我的安全面板启用
  2. ServiceAccountUser 是 super 管理员。

但是还是报错

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 截图

enter image description here

最佳答案

文档似乎对客户和域有些含糊不清。必须指定其中之一。您可以在使用 list() 函数时设置 customer 属性。它应该设置为客户的 ID(一个唯一的、随机的字符串),或者,如果您已经在 Google Apps 实例中作为管理员进行身份验证,您可以只指定准确的 customer=my_customer。或者,您可以指定 domain=example.com,其中 example.com 是 Google Apps 实例中的主域或辅助域。指定域时,只有在该域中拥有主要(家庭)地址的用户才会在结果中返回。指定客户时,将返回 Google Apps 实例中的所有用户。

您可以使用 Google API Explorer 确认这一点.将客户留空总是会导致错误。但是,将 my_customer 作为客户属性应该可以解决这个问题。

关于java - 使用 Java 的 Google Admin SDK 用户访问 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18711849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com