1

App Engine Application 내에서 자체 엔드 포인트를 생성하려고합니다. 사용자에게 "https://www.googleapis.com/auth/drive.readonly"범위의 물어볼 필요가있는 끝점 API가 있습니다. Drive API의 목록을 수행하고 해당 사용자의 드라이브 파일을 검사합니다.Google App Engine Cloud Endpoints 내에서 Drive API를 호출합니다.

문제는 엔드 포인트 API 내부에서 드라이브 API를 호출하는 방법을 모르겠다는 것입니다.

엔드 포인트 메소드 내부에는 사용자로부터받은 자격 증명이 있다고 생각합니다. 그러나 나는 그것을 어떻게 받는지 모른다.

저는 파이썬을 백엔드 언어로 사용하고 있습니다.

@drivetosp_test_api.api_class(resource_name='report') 
class Report(remote.Service): 
@endpoints.method(EmptyMessage, EmptyMessage, 
    name='generate', 
    path='report/generate', 
    http_method='GET' 
    ) 
def report_generate(self, request): 
    logging.info(endpoints) 
    return EmptyMessage() 

답변

1

당신은 액세스 토큰을 포함하는 HTTP 인증 헤더에 액세스 할 수 os.environ를 사용할 수있는, 즉 클라이언트 측에서 요구하는 모든 범위를 부여했다, 샘플의 drive.readonly을 포함한다.

if "HTTP_AUTHORIZATION" in os.environ: 
    (tokentype, token) = os.environ["HTTP_AUTHORIZATION"].split(" ") 
그런 다음 직접 또는 Google APIs Client Library for Python 사용하여 API를 호출하려면이 토큰을 사용할 수 있습니다

: 당신이 안드로이드 클라이언트를 사용하는 경우

credentials = AccessTokenCredentials(token, 'my-user-agent/1.0') 
http = httplib2.Http() 
http = credentials.authorize(http) 

service = build('drive', 'v2', http=http) 

files = service.files().list().execute() 

참고이 방법이 작동하지 않습니다 이는 액세스 토큰 대신 ID 토큰 인증을 사용하기 때문입니다.

+0

사실, 현재 다음과 같은 방법으로 달성하고 있습니다. 나는 그것이 당신의 접근 방식과 비슷하다고 생각합니다. basic_auth = self.request_state.headers.get ('인증'). 그런 다음 기본 http 요청을 사용하여 Basic_auth로 설정된 헤더가있는 드라이브 API를 사용합니다. request = urllib2.Request (request_url, headers = { "Authorization": basic_auth}). 그것은 효과가있다. 어느 쪽이 더 좋을까요? –

+0

그래, 그것도 잘 작동합니다. 별로 차이는 없습니다. 나 자신은 구글 API 클라이언트 라이브러리를 더 쉽고/깨끗하게 사용하고있다. request_url을 수동으로 생성하는 번거 로움을 덜어줍니다. – Scarygami

+0

감사합니다. 그런데이 답변에서 접근 방식을 사용하려면 Google API 클라이언트 라이브러리를 다운로드하여 프로젝트 내부에 배치해야합니다. oauth2client.client에서 AccessTokenCredentials를 가져와 AccessTokenCredentials를 가져옵니다. 이 의견은이 질문에 나중에 응답하고 AccessTokenCredentials를 가져 오는 방법을 모르는 사람들을위한 것입니다. –