2014-07-17 1 views
1
INFO: com.google.api.client.auth.oauth2.TokenResponseException: 400 OK 
{ 
    "error" : "invalid_grant" 
} 

내 코드있어 오류가

GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(httpTransport) 
      .setJsonFactory(js) 
      .setServiceAccountId(emailId) 
      .setServiceAccountScopes(scopes) 
      .setServiceAccountPrivateKeyFromP12File(new File(privateKeyPath)).build(); 

    System.out.println("SERVICE ACCOUNT SERVLET CALLED"); 

    credential.refreshToken(); 

이 방법이 잘 실행되고 있지만 갑자기 오류를 제공하기 시작합니다.

답변

3

가능한 이유는 :

1) 나는 내 서버가 잘못 인의 시간에 의한 비슷한 문제가 있었다. 시스템 클럭이 동기화되어 있는지 확인하십시오.

2) 첫 번째 성공적인 인증 후에 액세스 토큰을 다시 사용해야합니다. 이전 토큰이 아직 만료되지 않은 경우 invalid_grant 오류가 발생합니다. 어딘가에 캐시하여 재사용 할 수 있습니다.

3) 액세스 토큰을 전달했는지 확인하고 새로 고침 토큰이 실패했는지 확인하십시오. 실행하면 OAUth2 새로 고침 토큰이 액세스 토큰으로 바뀌고 서비스에 전달됩니다. 원시 새로 고침 토큰을 전달하면 API 액세스에 사용할 수 없으며 일시적인 액세스 토큰이됩니다.

4) 새로 고침 토큰 한도에 도달했을 수 있습니다. 특정 Google API에는 다음과 같은 몇 가지 설명이 있습니다. https://developers.google.com/compute/docs/authentication

5) 또한 취소 할 수 있습니다. Google API 콘솔 (https://code.google.com/apis/console/)로 이동하여 설치된 애플리케이션의 클라이언트 ID에서 클라이언트 비밀번호를 취소하십시오. 또한 새로운 클라이언트 비밀 번호로 코드를 업데이트하십시오.

+0

1 번 작업. 나는 너의 아이를 낳고 싶다. –

관련 문제