【问题标题】:sheets api error access denied exception desp Requested client not authorized表格 api 错误访问被拒绝异常 desp 请求的客户端未授权
【发布时间】:2016-01-31 07:05:42
【问题描述】:

您好,我正在使用 Google api.. 我已经成功地能够访问谷歌驱动器和谷歌日历,但是当我尝试访问谷歌电子表格时,我遇到了以下异常。

线程“main”com.google.gdata.util.AuthenticationException 中的异常:无法刷新访问令牌:403 Forbidden { “错误”:“access_denied”, "error_description" : "请求的客户端未授权。" }

原因:com.google.api.client.auth.oauth2.TokenResponseException: 403 Forbidden { “错误”:“access_denied”, "error_description" : "请求的客户端未授权。" }

我的代码如下

private static Credential authorize() throws Exception {
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();

    String SERVICE_ACCOUNT_EMAIL = "xxx@developer.gserviceaccount.com";
    List<String> SCOPES = Arrays.asList("https://spreadsheets.google.com/feeds/");

    GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
            .setJsonFactory(jsonFactory).setServiceAccountId(SERVICE_ACCOUNT_EMAIL).setServiceAccountScopes(SCOPES)
            .setServiceAccountPrivateKeyFromP12File(
                    new java.io.File("xxx.p12"))
            .setServiceAccountUser("xx@zzz.com")
            .build();
    return credential;
}

public static void main(String[] args) throws Exception {

    Credential credential = authorize();
    SpreadsheetService service = new SpreadsheetService("new data service ");
    service.setProtocolVersion(SpreadsheetService.Versions.V3);
    service.setOAuth2Credentials(credential);
    // Define the URL to request.  This should never change.
    URL SPREADSHEET_FEED_URL = new URL(
        "https://spreadsheets.google.com/feeds/spreadsheets/private/full");

    // Make a request to the API and get all spreadsheets.
    SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class);
    List<SpreadsheetEntry> spreadsheets = feed.getEntries();

    // Iterate through all of the spreadsheets returned
    for (SpreadsheetEntry spreadsheet : spreadsheets) {
      // Print the title of this spreadsheet to the screen
      System.out.println(spreadsheet.getTitle().getPlainText());
    }

}

谢谢

【问题讨论】:

    标签: google-api google-sheets google-api-java-client


    【解决方案1】:

    我只是通过了电子表格范围,我必须通过驱动器和工作表范围。现在我可以从驱动器中读取电子表格了。这是更正后的代码。

        String SERVICE_ACCOUNT_EMAIL = "xxxx@developer.gserviceaccount.com";
    
        ArrayList<String> scopes = new ArrayList<String>();
        scopes.add(0, DriveScopes.DRIVE);
        scopes.add(1, "https://spreadsheets.google.com/feeds");
    
    
        GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                .setJsonFactory(jsonFactory).setServiceAccountId(SERVICE_ACCOUNT_EMAIL).setServiceAccountScopes(scopes)
                .setServiceAccountPrivateKeyFromP12File(
                        new java.io.File("xx.p12"))
                .setServiceAccountUser("yyy@example.com")
    
                .build();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 2017-02-22
      • 1970-01-01
      • 2014-10-08
      • 2016-10-28
      相关资源
      最近更新 更多