2012-12-28 3 views
2

나는 앱 엔진에서 구글 예측 API에 액세스하려고 여기 지침에 따라거야 - 앱 엔진에 배포 할 때이 위대한 작품을 https://developers.google.com/appengine/articles/prediction_service_accountsApp Engine에서 Google API 호출에 대해 invalid_grant가 표시되는 이유는 무엇입니까?

. 그러나 동일한 코드는 로컬 devserver에서 다음 오류로 실패합니다. 나는 동일한 매개 변수, 생산 key_name, signature = app_identity.sign_blob(base_str) 반환 다른 서명과 로컬 컴퓨터에 있던 발견 것들의

credentials = AppAssertionCredentials(
       scope='https://www.googleapis.com/auth/prediction') 
http = credentials.authorize(httplib2.Http(memcache)) 
service = build("prediction", "v1.5", http=http, developerKey=api_key) 

ERROR 2012-12-28 03:48:53,084 client.py:461] Failed to retrieve access token: { 
    "error" : "invalid_grant" 
} 
ERROR 2012-12-28 03:48:53,115 cgi.py:121] Traceback (most recent call last): 
    File "/Users/gkedia/git/thirdgaze/main.py", line 83, in <module> 
    service = build('prediction', 'v1.5', http=http, developerKey=api_key) 
    File "/Users/gkedia/git/thirdgaze/apiclient/discovery.py", line 175, in build 
    resp, content = http.request(requested_url) 
    File "/Users/gkedia/git/thirdgaze/oauth2client/client.py", line 503, in new_request 
    self._refresh(request_orig) 
    File "/Users/gkedia/git/thirdgaze/oauth2client/client.py", line 412, in _refresh 
    self._do_refresh_request(http_request) 
    File "/Users/gkedia/git/thirdgaze/oauth2client/client.py", line 472, in _do_refresh_request 
    raise AccessTokenRefreshError(error_msg) 
AccessTokenRefreshError: invalid_grant 

하나.

내 컴퓨터의 시간이 올바르게를 싱크하고 offline_access 매개 변수는 아직 참여하지 않는 것 같습니다.

+0

dev 서버를 사용하는 로컬 컴퓨터에서 문제가 발생합니까 아니면 AppEngine에 배포 할 때 실패합니까? –

+0

로컬 컴퓨터에서만 오류가 발생했습니다. (수정 된 질문과 함께 편집 됨) – Gautam

답변

3

app_identity 및 더 일반적으로는 서비스 계정이 dev_appserver에서 작동하지 않습니다. 로컬 테스트시 일반 Google 계정과 관련된 액세스 토큰을 받으려면 일반 oauth2 webserver flow을 대체해야합니다. 같은

뭔가 :

flow = OAuth2WebServerFlow(client_id='your_client_id', 
          client_secret='your_client_secret', 
          scope='https://www.googleapis.com/auth/prediction', 
          redirect_uri='http://localhost:8080/oauth2callback') 
self.redirect(flow.step1_get_authorize_url()) 

그리고 핸들러 /oauth2callback에서 : 당신이 SERVER_SOFTWAREenvironment variable를 사용하여 dev_appserver 또는 생산 실행하는 경우

credentials = flow.step2_exchange(self.request.get('code')) 
http = credentials.authorize(httplib2.Http(memcache)) 
service = build("prediction", "v1.5", http=http, developerKey=api_key) 

는 쉽게 감지 할 수 있습니다.

+0

'dev_appserver.py'가 여전히 Google OAuth 2.0 서비스 계정에서 작동하지 않거나 업데이트 되었습니까? –

+0

memcache 및 developerKey 란 무엇입니까? –

관련 문제