gpt4 book ai didi

google-api - 调用 users().list().execute() 时,Google Directory API 返回 Not Authorized

转载 作者:行者123 更新时间:2023-12-05 00:28:39 25 4
gpt4 key购买 nike

我需要从我的 google 域中读取用户(和组)列表。

所以我去了我的 Google API 控制台并启用了 管理 SDK 并创建了一个 服务帐号调用 Google API。我使用以下谷歌库

  • google-api-services-admin-directory_v1-rev11-1.16.0-rc.jar
  • google-api-client-1.16.0-rc.jar

  • 我的代码是
         /*
    * Global instance of the JSON factory.
    */
    final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    /*
    Global instance of the HTTP transport.
    */
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();

    Collection<String> scopeList = new ArrayList<>();
    scopeList.add(DirectoryScopes.ADMIN_DIRECTORY_USER);
    scopeList.add(DirectoryScopes.ADMIN_DIRECTORY_GROUP);
    scopeList.add(DirectoryScopes.ADMIN_DIRECTORY_GROUP_MEMBER);

    GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId("nnnnnn@developer.gserviceaccount.com")
    .setServiceAccountScopes(scopeList)
    .setServiceAccountPrivateKeyFromP12File(new File("/Path/To/KeyFile/nnnnn-privatekey.p12"))
    // .setServiceAccountUser("admin@mydomain.org")
    .build();

    Directory admin = new Directory.Builder(httpTransport, JSON_FACTORY, credential)
    .setApplicationName("Test")
    .setHttpRequestInitializer(credential).build();


    Users users = admin.users().list().setDomain("mydomain.org").execute();

    我在最后一行收到这个

    错误
    {
    "code" : 403,
    "errors" : [ {
    "domain" : "global",
    "message" : "Not Authorized to access this resource/api",
    "reason" : "forbidden"
    } ],
    "message" : "Not Authorized to access this resource/api"
    }
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1045)
    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)

    如果我取消注释注释行( .setServiceAccountUser("admin@mydomain.org") ),则会出现不同的错误
        Exception in thread "main" 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)

    我的帐户 (admin@mydomain.org) 是 super 管理员 .我怀疑需要授予服务帐户访问权限 用户 API 范围 .但是 我找不到在哪里可以授予此访问权限 .我的 Google CPanel 有一个经典的 UI 模式。而且我在高级工具中没有“管理客户端 API 访问”页面。

    Advanced tools

    另外我不确定我应该在 .setApplicationName("Test") 上使用什么作为应用程序名称.

    谢谢你的帮助

    最佳答案

    您可以转到管理控制台中的“安全”设置 (admin.google.com/AdminHome?chromeless=1&pli=1#SecuritySettings:);然后单击高级设置 > 管理第三方 OAuth 客户端访问。在此映射您的客户端 ID(从 appconsole code.google.com/apis/console 在 oath2 的 API 访问下生成)和“一个或多个 API 范围”之后。使用那里提到的逗号分隔范围。对于 google 目录,您可以使用 https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.user

    希望在此之后它有效:)

    关于google-api - 调用 users().list().execute() 时,Google Directory API 返回 Not Authorized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18568716/

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