从Google开发者控制台创建了一个项目并创建了一个服务帐户。下载了密钥库。 我需要使用google admin sdk来创建/删除/访问用户。 我看到了Admin SDK ON API& Auth-> API。由于范围错误而无法获得授权。
public boolean makeConnectionWithGoogleAPI(){
try{
List<String> scopes = Arrays.asList("https://www.googleapis.com/auth/admin.directory.user",
"https://www.googleapis.com/auth/admin.directory.user.readonly");
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(clientEmail)
.setServiceAccountUser(userId)
.setServiceAccountScopes(scopes)
.setServiceAccountPrivateKeyFromP12File(
new java.io.File(privateKeyStoreLocation))
.build();
Directory admin =
new Directory.Builder(httpTransport, jsonFactory, null)
.setHttpRequestInitializer(credential).build();
Directory.Users.List list = admin.users().list();
Users users = list.execute();
List<User> listUsers=users.getUsers();
for(User user:listUsers){
System.out.println(user.getId());
}
return true;
}catch(Exception e){
e.printStackTrace();
}
return false;
}
com.google.api.client.auth.oauth2.TokenResponseException:400错误请求 { “错误”:“access_denied”, “error_description”:“不允许请求的范围:https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.user.readonly” } 在com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105) 在com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
答案 0 :(得分:6)
我们遇到了这个问题 - 在Google文档中没有这么清楚。
您为API创建的客户ID是您在API范围列表中为客户名称输入的内容。
转到此处输入您的项目。建立您希望有权访问的API:https://console.developers.google.com/project
然后在左侧的“凭据”标签上,创建新的OAuth客户端ID /名称信息。
您在此处获取客户名称,然后转到您的应用管理安全界面: https://admin.google.com/AdminHome?chromeless=1#OGX:ManageOauthClients 或者:Admin.google.com&gt;然后安全&gt;然后高级&gt;然后管理OAuth客户端
从开发人员控制台获取您在创建项目时收到的Client_ID,并将其指定为您希望授予API项目特定范围访问权限的客户名称。
对于我们来说,无论如何,这就解决了我们的访问拒绝错误。
谷歌因未正确记录此流程而感到羞耻。我们花了4天时间搞清楚。我们是一个.net商店,甚至他们的NuGet套餐都有拼写错误,拼写错误和资源缺失。非常令人沮丧的是没有更好地记录这么多步骤。
答案 1 :(得分:1)
我在提供的链接中找不到以下选项。我花了更多的时间在这上面。
https://admin.google.com/AdminHome?chromeless=1#OGX:ManageOauthClients 或者:Admin.google.com&gt;然后安全&gt;然后高级&gt;然后管理 OAuth客户端
谷歌是否有关于此的更新,如果有人有相关信息,请更新。 找出我的代码。
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("xxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com")
.setServiceAccountScopes(scopes)
.setServiceAccountPrivateKeyFromP12File(new File("D:\\ref\\privatekey.p12"))
.setServiceAccountUser("xxxxxxxxxxxxxxxxxxx")
.build();
Compute compute = new Compute.Builder(
httpTransport, JSON_FACTORY, null).setApplicationName(APPLICATION_NAME)
.setHttpRequestInitializer(credential).build();
Compute.Instances.List instances = compute.instances().list(projectId, zoneName);
InstanceList list = instances.execute();
错误消息是
403 Forbidden {&#34;错误&#34; :&#34; access_denied&#34;,&#34; error_description&#34; : &#34;不允许请求的范围: https://www.googleapis.com/auth/compute&#34; }
答案 2 :(得分:0)
我有同样的问题403 access_denied并通过跟进行动进行修复。
如FurnGuy所述
https://admin.google.com/AdminHome?chromeless=1#OGX:ManageOauthClients或:Admin.google.com&gt;然后安全&gt;然后高级&gt;然后管理OAuth客户端
从开发人员控制台获取您在创建项目时收到的Client_ID,并将其指定为您希望授予API项目特定范围访问权限的客户名称。
客户端名称是您从开发人员控制台创建的客户端ID,并添加示例范围https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.orgunit.readonly
您可以用逗号分隔,然后授权它。你可以在你当地的主机上试试:8888