【问题标题】:Google Directory API return access_denied when call groups().list().execute()Google Directory API 在调用 groups().list().execute() 时返回 access_denied
【发布时间】:2013-08-24 22:04:56
【问题描述】:

获取用户列表可行,但组列表返回错误 (access_denied)

来源

scopeList.add(DirectoryScopes.ADMIN_DIRECTORY_USER);
scopeList.add(DirectoryScopes.ADMIN_DIRECTORY_GROUP);
scopeList.add(DirectoryScopes.ADMIN_DIRECTORY_GROUP_MEMBER);

credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(jsonFactory)
    .setServiceAccountId("xxxxx@developer.gserviceaccount.com")
    .setServiceAccountScopes(scopeList)
    .setServiceAccountPrivateKeyFromP12File(new java.io.File("xxxxx-privatekey.p12"))
    .setServiceAccountUser("admin@test.com")
    .build();

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


admin.users().list().setDomain("test.com").execute();
admin.groups().list().setDomain("test.com").execute();

错误

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:332)
    at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:352)
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:269)
    at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:454)
    at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:215)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:854)
    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)

【问题讨论】:

    标签: google-api-java-client google-admin-sdk


    【解决方案1】:

    【讨论】:

    • ServiceAccountUser 是超级管理员,Service Account 已授予组访问范围。 (googleapis.com/auth/admin.directory.group)
    • 奇怪的是users().list()成功了,groups.list()失败了。
    • 我发现了问题。下面的行会带来麻烦。 scopeList.add(DirectoryScopes.ADMIN_DIRECTORY_GROUP_MEMBER);
    • @Moongle 您如何将用户和组的访问范围授予您的服务帐户?我找不到我能做到的地方。我使用相同的代码,但总是收到“错误”:“access_denied”或“代码”:403,“错误”:[{“域”:“全局”,“消息”:“未授权访问此资源/api " ...
    • @dmitry747 请为此发布一个新问题。
    猜你喜欢
    • 2013-09-05
    • 2017-03-06
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2018-03-03
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多