Есть ли способ защитить облачное хранилище данных Proto в хранилище данных Google?

мои настройки:Python, движок приложения Google, использующий endpoints_proto_datastoreiOS, конечная точка Генератор клиентской библиотеки Obj-CФон

Я настроил тестовый API-интерфейс облака Google и запустил его довольно быстро. Он отлично работает, используя тестовое приложение в симуляторе iOS и Google Explorer's Explorer. API в настоящее время открыт для всех без аутентификации.

Я бы хотел:настроить API-ключ или системные учетные данные, которые могут использоваться приложением, чтобы гарантировать, что оно само может получить доступ к API - со всеми другими отказано.

Метод вGoogle Endpoints Auth docs (1) создать идентификатор клиента OAuth 2.0, используяКонсоль разработчиков Google (2). Итак, я создал идентификатор для установленного приложения типа: iOS. Все идет нормально.

В приложении объект GTLService выглядит следующим образом ...

-(GTLServiceDemogaeapi *)myApiService {
    GTMOAuth2Authentication *auth = [[GTMOAuth2Authentication alloc] init];
    auth.clientID = @"10???????????????????ie.apps.googleusercontent.com";
    auth.clientSecret = @"z????????????3";
    auth.scope = @"https://www.googleapis.com/auth/userinfo.email";

    static GTLServiceDemogaeapi *service = nil;
    if (!service) {
        service = [[GTLServiceDemogaeapi alloc] init];
        service.authorizer = auth;
        service.retryEnabled = YES;
        [GTMHTTPFetcher setLoggingEnabled:YES];
    }
    return service;
 }

На GAE я указал (allow_client_ids и добавил проверку пользователя к методам ...

@endpoints.api(name='demogaeapi', version='v1',
               allowed_client_ids=['10?????????????ie.apps.googleusercontent.com',
               endpoints.API_EXPLORER_CLIENT_ID],
               scopes=[endpoints.EMAIL_SCOPE],
               description='My Demo API')
class MyApi(remote.Service):

    @TestModel.method(path='testmodel/{id}', name='testmodel.insert', http_method='POST')
    def testModelInsert(self, test_model):

        current_user = endpoints.get_current_user()
        if current_user is None:
            raise endpoints.UnauthorizedException('Invalid token.')
Проблема

текущий пользователь всегдаНикто поэтому метод всегда будет вызывать исключение. Похоже, что это известная проблемаПроблема 8848: Google Cloud Enpoints API get_current_user не заполняет user_id (3) без перспективы исправления в ближайшее время.

Опции?Подождите, пока Google исправит проблему 8848. Не могу, у нас есть продукт для выпуска!

РЕДАКТИРОВАТЬ: 15 мая 2015 г. - Google выдал 8848 статус WontFix.

Я видел, что можно использовать API-ключ, но, хотя мне удалось его создать, я не нашел способа включить его в бэкэнд. Я также отмечаю, что у этого метода есть большая дыра, в которой Google API Explorer может победить егосмотри ТАК вопрос (4).

Ли@ endpoints.api Аргумент: auth_level, описано здесь (5), дать ответ? Я пытался с помощью:

@endpoints.api(name='demogaeapi', version='v1',
       auth_level=endpoints.AUTH_LEVEL.REQUIRED,
       scopes=[endpoints.EMAIL_SCOPE],
       description='My Demo API')

Но был в состоянии использовать API-интерфейс из клиентского приложения без использования учетных данных. Так что это явно не добавило никакой аутентификации.

Добавьте hiddenProperty к клиентскому запросу, содержащему общий секретный ключ. Как описано боссилобстерВот (6) и КарлосВот (7). Я попробовал это, но не вижу, как добраться до сырогозапрос объект (предмет другого вопросаКак получить по запросу объект при использовании endpoints_proto_datastore.ndb?).

@TestModel.method(path='testmodel/{id}', name='testmodel.insert', http_method='POST')
def testModelInsert(self, test_model):

    mykey,keytype = request.get_unrecognized_field_info('hiddenProperty')
    if mykey != 'my_supersecret_key':
        raise endpoints.UnauthorizedException('No, you dont!')

РЕДАКТИРОВАТЬ: Другой вариант всплыл:

Создайте учетную запись службы, используяКонсоль разработчиков Google (2). Используйте эту учетную запись для получения доступа к API без согласия пользователя (через пользовательский интерфейс). Тем не менее, похоже, что Google ограничивает количество приложений, которые могут быть добавлены таким образом, 15 или 20. См. Google OAuth2 doc (8). Мы, вероятно, превысим лимит.Вопрос

Кто-нибудь знает, как я могу получить любой из этих вариантов работы? Или я должен подходить к этому по-другому?

Как видите, мне нужны руководство, помощь, идеи ...

Поскольку мне нужно 10 репутации, чтобы опубликовать более 2 ссылок: вот ссылки, которые мне пришлось извлечь и добавить в качестве ссылок. Вроде как испортил ход вопроса действительно.

cloud.google.com/appengine/docs/python/endpoints/authconsole.developers.google.com/code.google.com/p/googleappengine/issues/detail?id=8848stackoverflow.com/a/26133926/4102061cloud.google.com/appengine/docs/python/endpoints/create_apistackoverflow.com/a/16803274/4102061stackoverflow.com/a/26133926/4102061developers.google.com/accounts/docs/OAuth2

Ответы на вопрос(1)

Ваш ответ на вопрос