2017-01-25 7 views
0

Я создал API на Python с Google Cloud Endpoint Framework, и мой Android-клиент - единственное приложение, которое имеет разрешение на общение с API.Аутентификация аудитории конечных точек

Я следовал за учебники и руководства по Google для аутентификации и защиты API можно дать доступ к определенным клиентским идентификаторами:

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 
           ) 

Об этом site они говорят, что «аудитория» должен содержать клиентский идентификатор backend api

Для клиентов Android этот механизм является аргументом аудитории, в котором вы указываете идентификатор клиента API-интерфейса.

Но на this месте, они говорят, что «зрители» поле должно содержать Android идентификатор клиента:

Replace ALLOWED_CLIENT_IDS со списком идентификаторов клиента OAuth 2 генерируемой из Google Cloud Platform консоли каждого клиента проект и замените ANDROID_AUDIENCE на список идентификаторов веб-клиента Android. Идентификатор веб-клиента - это идентификатор клиента с добавлением .apps.googleusercontent.co, например: YOUR-CLIENT-ID.apps.googleusercontent.com.

Каков правильный способ защиты API для несанкционированного доступа? Мне не нужна учетная запись «user» на стороне сервера, я хочу, чтобы клиент Android был единственным клиентом, который может получить доступ к API. Мой клиент REST также может обращаться к API, если идентификаторы клиента указаны и AUTH_LEVEL установлен на требуемом уровне.

ответ

0

Похоже, что ANDROID_AUDIENCE должен быть идентификатором веб-клиента на сервере бэкэнд. Кроме того, мне пришлось добавить новый «идентификатор веб-клиента» для моего приложения для Android, но не типа «Android», а «Web-приложение». Этот идентификатор клиента должен находиться в google-services.json вместе с идентификатором клиента Android и в массиве ALLOWED_CLIENT_IDS на сервере backend.

И в каждом методе я должен проверить get_current_user(). Я не понимаю, почему это необходимо, но работает только так.

Я действительно хочу сказать, что документация или лучшие «руководства» могут быть немного бета-тестерами на сайте Google и согласованы.