【问题标题】:Insufficient Permission: Request had insufficient authentication scopes. Google Drive权限不足:请求的身份验证范围不足。谷歌云端硬盘
【发布时间】:2021-08-27 17:06:37
【问题描述】:

我尝试使用 java 代码将成员添加到我的谷歌表格,但它不起作用。

我使用 OAuthor 2。

谁能帮我解决这个问题?非常感谢。

我的代码:

public static void main(String... args) throws IOException, GeneralSecurityException {
    // Build a new authorized API client service.
    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    final String spreadsheetId = "10gLncj6bGmm-UcXP1vztsbv23CD85GNG95zjDgZ8HBA";
    

    JsonBatchCallback<Permission> callback = new JsonBatchCallback<Permission>() {
        @Override
        public void onFailure(GoogleJsonError e,
                              HttpHeaders responseHeaders)
                throws IOException {
            // Handle error
            System.err.println(e.getMessage());
        }

        @Override
        public void onSuccess(Permission permission,
                              HttpHeaders responseHeaders)
                throws IOException {
            System.out.println("Permission ID: " + permission.getId());
        }
    };
    Drive driveService = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
            .setApplicationName(APPLICATION_NAME)
            .build();
    BatchRequest batch = driveService.batch();
    Permission userPermission = new Permission()
            .setType("user")
            .setRole("reader")
            .setEmailAddress("trilo10101990@gmail.com");
    driveService.permissions().create(spreadsheetId, userPermission)
            .setFields("id")
            .queue(batch, callback);
    batch.execute();
}

输出:

Insufficient Permission: Request had insufficient authentication scopes.

【问题讨论】:

  • 请编辑您的问题并包含您用于授权的代码。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: java spring oauth google-drive-api google-api-java-client


【解决方案1】:

权限不足:请求的身份验证范围不足。

表示您已向其验证应用程序的用户未授予您的应用程序足够的范围来访问您尝试访问的数据。

您似乎在使用Permissions.create 此方法要求用户获得以下范围之一的授权

你没有发布你所有的授权码你可能有这样的东西。

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow
    .Builder(httpTransport, JSON_FACTORY, clientSecrets,
        DriveScopes.all()).setDataStoreFactory(dataStoreFactory)
    .build();

诀窍是在上面的代码请求完全访问谷歌驱动器的情况下查找您请求的范围。您需要检查您的范围并确保您已请求完全访问权限。

之后,您需要删除用户对您的应用程序的同意并强制它再次请求用户访问。用户需要查看同意屏幕才能验证他们的同意。

【讨论】:

  • 非常感谢 DalmTo。你能帮我吗,如何删除用户对我的应用程序的同意?
  • 如果没有看到您的身份验证代码,这很难说,您可能将访问令牌和刷新令牌存储在某个地方。但是,您可以通过用户 google 帐户 myaccount.google.com/permissions?pli=1 直接执行此操作,只需查找您的应用名称并将其删除。
  • 谢谢。我删除了范围访问。获取新的 OAuthor 代码。并再次运行。然后它显示另一个错误:线程“main”com.google.api.client.auth.oauth2.TokenResponseException中的异常:400 Bad Request POST oauth2.googleapis.com/token {“error”:“invalid_grant”,“error_description”:“令牌已被已过期或撤销。” }
  • 您现在需要在代码中删除它。您仍在使用旧的刷新令牌运行,并且您的代码未设置为强制重新授权。
  • Dalm你知道如何编辑单元格的样式(颜色、边框、合并...)
猜你喜欢
  • 2018-10-20
  • 2019-07-06
  • 1970-01-01
  • 2020-11-29
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 2021-08-07
相关资源
最近更新 更多