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

Insufficient Permission: Request had insufficient authentication scopes. Google Drive

我尝试使用 java 代码将成员添加到我的 google sheet,但它不起作用。

我使用 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.

Insufficient Permission: Request had insufficient authentication scopes.

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

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

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

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

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

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