Я создал 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 установлен на требуемом уровне.