0

서비스 계정을 사용하여 Google Sheet API 요청을 구현하고 싶습니다. 이 코드 생성 :TokenResponseException : 401 Unconthorized

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(); 

을하지만이 오류 얻을 :이 방법 .execute();

에 401 권한

:

com.google.api.client.auth.oauth2.TokenResponseException을 이 문제를 어떻게 해결할 수 있는지 알고 있습니까?

답변

0

Standard Error Responses에서 기준 오류 401 invalidCredentials 때문이며 이는 인증 토큰이 유효하지 않거나 만료 된 것을 나타낸다.

권장 조치 :이

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

, 당신은 가능성이 부여 된 토큰 수도 더 이상 그 일을 예상하는 코드를 작성해야 함을 언급 Token Expiration을 확인 할 수 있습니다. 또한 토큰이 작동을 멈출 수있는 이유에 대한 설명을 제공합니다.

  • 사용자가 액세스 권한을 취소했습니다.
  • 토큰을 6 개월 동안 사용하지 않았습니다.
  • 사용자가 비밀번호를 변경했으며 토큰에 Gmail 범위가 포함되어 있습니다.
  • 사용자 계정이 특정 토큰 요청 수를 초과했습니다.

희망 하시겠습니까?

+0

각 호출 전에 토큰을 새로 고치기 위해 테스트했지만 그 결과는 같습니다. –

+0

[SO 게시물] (https://stackoverflow.com/questions/39201216/exception-in-thread-main-com-google-api-client-auth-oauth2-tokenresponseexcept/39225165)에 제공된 해결책을 확인하고 싶을 수 있습니다. # 39225165) 여기서 토큰이 유효하지 않은 경우 수행 할 단계가 있습니다. – Teyam