适用于非管理员用户的google admin SDK

时间:2014-06-23 06:21:31

标签: google-apps google-admin-sdk google-directory-api

  1. 我在开发者控制台中创建了Google应用。
  2. 启用Admin SDK
  3. 启用API访问
  4. 在“管理OAuth客户端访问”中,我添加了“授权API客户端” “https://www.googleapis.com/auth/admin.directory.user”范围。
  5. 此外,我想从我的域中获取用户。

    JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    
    ArrayList<String> scopeList = new ArrayList<>();
    scopeList.add(DirectoryScopes.ADMIN_DIRECTORY_USER_READONLY);
    GoogleCredential credential = new GoogleCredential.Builder()
              .setTransport(httpTransport)
              .setJsonFactory(JSON_FACTORY)
              .setServiceAccountId("bla-bla@developer.gserviceaccount.com")
              .setServiceAccountScopes(scopeList)
              .setServiceAccountPrivateKeyFromP12File(new File("p12 file")))
              .setServiceAccountUser("superadmin@my-domain.com")
              .build();
    
    credential.setAccessToken("access token of current google user");
    
    Directory admin = new Directory.Builder(httpTransport, JSON_FACTORY, credential)
              .setApplicationName("Capsidea")
              .setHttpRequestInitializer(credential).build();
    return admin.users().list().setDomain("my-domain.com").execute();
    

    通过superadmin@my-domain.com通过OAuth登录谷歌时,它的工作正常。 但当我登录some-user-non-admin@my-domain.com时,我有错误: “未授权访问此资源/ api”

    非管理员用户是否可以获取域中所有用户的列表? 当域更改时,这个代码将起作用,因为有必要指定superadmin'a? 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

setServiceAccountUser需要一个能够使用Admin API的用户(有一个细粒度的角色配置工具)。

请说明您的代码需要这样的用户才能工作。