Java 使用Google Sheets API和服务帐户时禁止获取403

Java 使用Google Sheets API和服务帐户时禁止获取403,java,oauth,google-api,google-oauth,google-sheets-api,Java,Oauth,Google Api,Google Oauth,Google Sheets Api,我有一个使用服务帐户的应用程序(因为它是从cron作业运行的,所以我不能让它通过浏览器中的用户进行授权)。以下是我如何创建图纸服务: private static final String APPLICATION_NAME = "my app"; private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); private static HttpTransport HTTP_TRANSPO

我有一个使用服务帐户的应用程序(因为它是从cron作业运行的,所以我不能让它通过浏览器中的用户进行授权)。以下是我如何创建图纸服务:

private static final String APPLICATION_NAME = "my app";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static HttpTransport HTTP_TRANSPORT;

static {
    try {
        HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    } catch (GeneralSecurityException | IOException e) {
        e.printStackTrace();
    }
}

private static final List<String> SCOPES = Collections.singletonList(SheetsScopes.SPREADSHEETS);

private static Credential authorize() throws IOException, GeneralSecurityException {

    GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("key.json"), HTTP_TRANSPORT, JSON_FACTORY);
    credential = credential.createScoped(SCOPES);
    return credential;
}

static Sheets getSheetsService() throws IOException, GeneralSecurityException {
    Credential credential = authorize();

    return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
}
私有静态最终字符串应用程序\u NAME=“我的应用程序”;
私有静态最终JsonFactory JSON_FACTORY=JacksonFactory.getDefaultInstance();
专用静态HttpTransport HTTP_传输;
静止的{
试一试{
HTTP_TRANSPORT=GoogleNetHttpTransport.newTrustedTransport();
}捕获(一般安全性异常| IOE异常){
e、 printStackTrace();
}
}
私有静态最终列表范围=集合.singletonList(SheetsScopes.SPREADSHEETS);
private static Credential authorize()引发IOException、GeneralSecurityException{
GoogleCredential credential=GoogleCredential.fromStream(新文件输入流(“key.json”)、HTTP_传输、json_工厂);
凭证=凭证。创建作用域(作用域);
返回凭证;
}
静态工作表getSheetsService()引发IOException、GeneralSecurityException{
凭证=授权();
返回新的Sheets.Builder(HTTP_TRANSPORT,JSON_FACTORY,credential).setApplicationName(APPLICATION_NAME).build();
}

每次运行它时,我都会收到一个“com.google.api.client.googleapis.json.GoogleJsonResponseException:403禁止”错误。您知道如何解决此问题吗?

您是否授予服务帐户访问该文件的权限?谢谢您的回复!你是说我在文件中添加了服务帐户电子邮件地址作为编辑器?如果是,是的。你能解决这个问题吗?我有同样的问题,我已经给了服务帐户访问该表的权限。