2017-01-25 3 views
0

Python에서 Google Cloud Endpoint Framework로 API를 만들었으며 Android 클라이언트가 API와의 대화 권한이있는 유일한 애플리케이션입니다. Cloud Endpoint Authentication 잠재 고객

나는 인증을위한 구글의 튜토리얼과 가이드를 따라 하나의 특정 클라이언트 ID에 액세스 할 수있는 API 보호하기 위해 : 그들은 "관객"의 클라이언트 ID를 포함해야한다는 말을이 site

WEB_CLIENT_ID = 'myApiClientId.apps.googleusercontent.com' 
ANDROID_CLIENT_ID = 'myAndroidClientId.apps.googleusercontent.com' 
ANDROID_AUDIENCE = [ANDROID_CLIENT_ID] 
ALLOWED_CLIENT_IDS = [WEB_CLIENT_ID, ANDROID_CLIENT_ID, endpoints.API_EXPLORER_CLIENT_ID] 

api_collection = endpoints.api(name='myApi', 
           version='v1', 
           allowed_client_ids=ALLOWED_CLIENT_IDS, 
           audiences=ANDROID_AUDIENCE, 
           auth_level=endpoints.AUTH_LEVEL.REQUIRED 
           ) 

을 백엔드 API

Android 클라이언트의 경우이 메커니즘은 사용자가 백엔드 API의 클라이언트 ID를 지정하는 audiences 인수입니다.

각 클라이언트의 Google 클라우드 플랫폼 콘솔에서 생성의 OAuth 2 클라이언트 ID의 목록을 ALLOWED_CLIENT_IDS 교체 :

그러나이 this 사이트에, 그들은 "관객은"필드는 안드로이드 클라이언트 ID를 포함해야한다는 이야기 프로젝트 및 은 ANDROID_AUDIENCE를 Android 웹 클라이언트 ID의 목록으로 대체합니다. 웹 클라이언트 ID는 .apps.googleusercontent.co가 추가 된 클라이언트 ID입니다 (예 : YOUR-CLIENT-ID.apps.googleusercontent.com).

무단 액세스를 위해 API를 보호하는 올바른 방법은 무엇입니까? 나는 백엔드쪽에 "사용자"계정이 필요 없으며 안드로이드 클라이언트가 API에 액세스 할 수있는 유일한 클라이언트가되기를 원합니다. 클라이언트 ID가 지정되고 AUTH_LEVEL이 필수로 설정되었지만 내 REST 클라이언트가 API에 액세스 할 수 있습니다.

답변

0

ANDROID_AUDIENCE는 (는) 백엔드 서버의 웹 클라이언트 ID 여야합니다. 또한, 안드로이드 애플리케이션에는 새로운 "웹 클라이언트 ID"를 추가해야하지만 "Android"가 아닌 "Webapplication"유형을 추가해야했습니다. 이 클라이언트 ID는 Android 클라이언트 ID와 함께 google-services.json에 있고 백엔드 서버에있는 ALLOWED_CLIENT_IDS 배열에 있어야합니다.

그리고 모든 메소드에서 get_current_user()를 확인해야합니다. 왜 이것이 필요한지 이해할 수 없지만이 방법으로 만 작동합니다.

나는 문서 또는 더 나은 "가이드"가 Google 사이트에서 일관성 있고 약간 일관성이 있다고 말할 수 있습니다.