我正在尝试创建一个复制和删除现有电子表格的应用程序。我已经从 https://developers.google.com/drive/v2/web/quickstart/java 设置了驱动器快速入门
我现在收到的错误是说我没有足够的权限来访问它,即使在我运行示例后单击浏览器上出现的"允许"按钮之后也是如此。
我的代码与快速入门链接上的代码完全相同。
我得到这个堆栈跟踪:
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Insufficient Permission",
"reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
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:321)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at DriveQuickstart.main(DriveQuickstart.java:110)
为了建立辅助词的反应,这是对我有用的:
1) 更改此行:
private static final List<String> SCOPES =
Arrays.asList(DriveScopes.DRIVE_METADATA_READONLY);
自:
private static final java.util.Collection<String> SCOPES =
DriveScopes.all();
2) 删除现有存储的凭据,以便再次获取它们,然后重新执行程序:
rm ~/.credentials/drive-java-quickstart/StoredCredential
注意:您想要一个名为client_secret.json
文件的OAuth客户端ID,而不是client_id.json文件(我认为 - 无论如何,这对我有用)。
由于使用的是快速入门中的确切代码,因此它可能与作用域集有关,它当前设置为 DriveScopes.DRIVE_METADATA_READONLY
,如果在"选择身份验证作用域"页中查看其含义,它会指出
允许对文件元数据进行只读访问,但不允许读取或下载文件内容的任何访问权限
您可以查看引用的页面以了解您将确切使用的范围。它最有可能是https://www.googleapis.com/auth/drive
,所以请查看DriveScopes
类以获取相同性质的常量。