0

我想使用服務帳戶實施Google Sheet API請求。我創造了這個代碼:TokenResponseException:401未授權

HttpTransport httpTransport = new NetHttpTransport(); 
     JacksonFactory JSON_FACTORY = new JacksonFactory(); 

     ClassLoader classLoader = this.getClass().getClassLoader(); 
     java.io.File path = new java.io.File(classLoader.getResource("i-6dc0c917ee63.p12").getFile()); 

     GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(httpTransport) 
      .setJsonFactory(JSON_FACTORY) 
      .setServiceAccountId("[email protected]") 
      .setServiceAccountPrivateKeyFromP12File(path) 
      .setServiceAccountScopes(Arrays.asList(SheetsScopes.SPREADSHEETS)) 
      .setServiceAccountUser("[email protected]") 
      .build(); 

     Sheets service = new Sheets.Builder(httpTransport, JSON_FACTORY, null) 
      .setApplicationName("project") 
      .setHttpRequestInitializer(credential).build(); 

     Sheets.Spreadsheets spreadsheets = service.spreadsheets(); 
     Spreadsheet includeGridData = spreadsheets.get(spreadsheetId).execute(); 

但我得到這個錯誤:

com.google.api.client.auth.oauth2.TokenResponseException:401未經授權

在這種方法.execute();

你知道我該如何解決這個問題嗎?

回答

0

根據Standard Error Responses,錯誤401歸因於invalidCredentials,這表示身份驗證令牌無效或已過期。

建議操作:

Do not retry without fixing the problem. You need to get a new auth token.

有了這個,你可能要檢查Token Expiration其中提到您必須編寫代碼來預測這種可能性,即授權令牌可能不再工作。它也給出了令牌可能停止工作的以下可能原因:

  • 用戶已撤銷訪問權限。
  • 令牌未使用六個月。
  • 用戶更改密碼,令牌包含Gmail作用域。
  • 用戶帳戶已超過一定數量的令牌請求。

希望有幫助!

+0

我在每次調用之前都測試過刷新令牌,但結果相同。 –

+0

您可能希望檢查此[SO帖子]中給出的解決方案(https://stackoverflow.com/questions/39201216/exception-in-thread-main-com-google-api-client-auth-oauth2-tokenresponseexcept/39225165 #39225165)其中,如果令牌無效,則會執行相應的步驟。 – Teyam