2012-10-23 4 views
1

Google 웹 애플리케이션에 Google Plus API를 통합하려고합니다.OAuth token invalid_grant

Google에서 인증 할 수 있으며 코드가 있습니다. HttpClient을 사용하여 access_token을 시도 할 때 문제가 발생합니다. 여기

몇 가지 코드 :

DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost post = new HttpPost(
       "https://accounts.google.com/o/oauth2/token"); 
     post.addHeader("accept", "application/json"); 
     post.addHeader("Content-Type", "application/x-www-form-urlencoded"); 

     List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
     nvps.add(new BasicNameValuePair("code", myCode)); 
     nvps.add(new BasicNameValuePair("client_id", 
       "my_client_id")); 
     nvps.add(new BasicNameValuePair("redirect_uri", 
       "http://localhost:8080/test/gplus.do")); 
     nvps.add(new BasicNameValuePair("client_secret", 
       "my_client_secret")); 
     nvps.add(new BasicNameValuePair("grant_type", "authorization_code")); 
     post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); 

     HttpResponse response = httpClient.execute(post); 

     BufferedReader br = new BufferedReader(new InputStreamReader(
       (response.getEntity().getContent()))); 

     String output; 
     while ((output = br.readLine()) != null) { 
      res = res + output; 
     } 

내가 여러 번 이전에 내 모의 응용 프로그램에서 토큰을 얻을 수 있었다, 그러나 지금은 알 수없는 이유로 실패 할 것으로 보인다. 내가 얻을 수있는 것은 error:invalid_grant입니다. 왜 이런 일이 일어나는 걸까요?

답변

1

정말 이런 식으로 토큰을 가지고 계십니까? AFAIK, oAuth에서는 권한 코드를 얻기 위해 먼저 권한 부여/권한 부여를 수행 한 다음이 코드를 사용하여 액세스 토큰을 얻기 위해/token을 호출합니다.

p.s. 패키지를 Spring for oAuth으로 사용할 수 있기 때문에 모든 "숨겨진"것들이 만들어 지므로 XML을 구성하기 만하면됩니다.

+1

예, 이전에 토큰을 받고있었습니다. 게다가, 실제로 코드를 얻지 만 토큰으로 교환하려고 할 때 문제가 나타납니다. 라이브러리를 사용하지 않겠지 만 문제가 지속되면 내가 제안한 라이브러리를 살펴 보겠습니다. – Dragos

+0

그래서 첫 번째 호출 (/ authorize)이 작동하지만 두 번째 호출이 실패합니다. 1. 보이는 오류는 무엇입니까? 2. HttpClient로 디버그하고 서버에 보내려는 URL을보십시오. 그런 다음 REST 클라이언트를 사용하여 같은 URL을 시도하십시오. (우리는 문제를 찾아 내기 위해 노력합니다 ...) – OhadR

+0

문제는 httpclient를 사용하여 요청을하지만 어쨌든 redirect_uri로 리다이렉트되어 다른 토큰을 요구하십시오. 이 때 오류가 발생합니다. 어떻게해야하는지 말해 줄 수 있어요? – Dragos

관련 문제