2016-08-02 5 views
0

Я создал простую приложение python для запуска в Google App Engine. Код:Google App Engine - ошибка аутентификации развернутой версии приложения

import webapp2 

from oauth2client.contrib.appengine import AppAssertionCredentials 
from apiclient.discovery import build 
from googleapiclient import discovery 
from oauth2client.client import GoogleCredentials 


class MainPage(webapp2.RequestHandler): 
def get(self): 
    self.response.headers['Content-Type'] = 'text/plain' 
    self.response.write('BigQuery App') 
    credentials = AppAssertionCredentials(
              'https://www.googleapis.com/auth/sqlservice.admin') 
    service = discovery.build('bigquery', 'v2', credentials=credentials) 

    projectId = '<Project-ID>' 

    query_request_body = { 
     "query": "SELECT a from Data.test LIMIT 10" 
    } 

    request = service.jobs().query(projectId=projectId, body=query_request_body) 
    response = request.execute() 

    self.response.write(response) 



app = webapp2.WSGIApplication([ 
('/', MainPage), 
], debug=True) 

Я могу разместить этот код локально (http://localhost:8080) и все работает правильно, но я получаю следующее сообщение об ошибке Ошибка сервера 500 при попытке развернуть его на GAE с помощью:

appcfg.py -A <Project-Id> -V v1 update . 

Это ошибка я получаю от Error Report Console:

error: An error occured while connecting to the server: DNS lookup failed for URL:http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/https://www.googleapis.com/auth/sqlservice.admin/?recursive=True 

Я считаю, что это проблема аутентификации и убедиться, что счет моей службы был авторизован я прошел через gclo ud для учетных записей служб, и я также установил заданные переменные среды из SDK.

Я пытался обойти это некоторое время, любые указатели очень оценены. Спасибо.

Кроме того, я использую служебную учетную запись Auth, следуя этим документам: https://developers.google.com/identity/protocols/OAuth2ServiceAccount, где говорится, что я не должен запускать AppAsseritionCredenitals локально, что добавляет к моей путанице, потому что на самом деле я не могу без ошибок.

EDIT:

После reuploading и reauthorizing моей учетной записи службы я был в состоянии подключиться к серверу. Тем не менее, ошибка авторизации продолжается с этим:

HttpError: <HttpError 403 when requesting https://www.googleapis.com/bigquery/v2/projects/sqlserver-1384/queries?alt=json returned "Insufficient Permission"> 

ответ

0

Чтобы исправить «ошибку при подключении к серверу», следуйте инструкциям, приведенным в этом ответе: https://stackoverflow.com/questions/31651973/default-credentials-in-google-app-engine-invalid-credentials-error#= , а затем повторно загрузить приложение

Тогда , чтобы исправить HttpError 403 при запросе ... вернул «Недостаточное разрешение», вы должны изменить область, которую вы запрашивали. В моем случае я запрашивал:

credentials = AppAssertionCredentials(
          'https://www.googleapis.com/auth/sqlservice.admin') 

однако, правильный возможности для Google BigQuery является: https://www.googleapis.com/auth/bigquery. Который выглядит следующим образом:

credentials = AppAssertionCredentials(
          'https://www.googleapis.com/auth/bigquery') 

Если вы используете другой API, использовать в зависимости от того Прицел указано в документации.

Смежные вопросы