iOS Google Cloud Endpoint Authenticated API-вызов с использованием локального сервера разработки

Я реализовал облачную конечную точку с некоторыми вызовами, требующими аутентификации пользователя Google, и теперь я хочу протестировать эти вызовы с помощью приложения iOS. До сих пор я выполнял все шаги в документации, и мне удалось заставить пользователя войти в систему OAUTH из приложения, однако, когда я пытаюсь впоследствии сделать вызов API на локальном сервере разработки (localhost: 8888 ), я получаю следующую ошибку:

Не удается авторизовать запрос со схемой http

Из того, что я прочитал, авторизация не будет работать со схемой http и требует https. Итак, мои вопросы: можно ли использовать https с локальным сервером разработки? Или есть что-то еще, что я пропустил, что позволит мне проверить аутентификацию пользователя в локальной среде?

Любая помощь приветствуется. Ваше здоровье.


person Stephen Asherson    schedule 28.07.2013    source источник
comment
Какой клиент вы используете для звонка? http будет отлично работать на сервере разработки.   -  person bossylobster    schedule 30.07.2013
comment
@bossylobster Я звоню из приложения для iOS. Я решил, что ошибка, которую я получаю, связана с тем, что я выполнял аутентифицированный вызов (для которого требуется HTTPS), но локальный сервер разработки использует только HTTP. Я не прав в своем понимании? Спасибо!   -  person Stephen Asherson    schedule 01.08.2013
comment
Сервер разработки не может подписывать запросы https, поскольку ни один центр сертификации не знает о локальном хосте на вашем компьютере. В результате большинство функций работать не будет, поэтому используйте http.   -  person bossylobster    schedule 01.08.2013


Ответы (1)


Спасибо за вашу помощь @bossylobster. Я всегда использовал http на локальном сервере разработки, однако реальная проблема заключалась в том, что библиотека iOS OAuth2 не разрешала запросы, отличные от https, а это означало, что я не мог тестировать аутентифицированные вызовы локально.

В конце концов я нашел флаг в классе GTMOAuth2Authentication библиотеки iOS OAuth2, который позволяет библиотеке авторизовать все запросы (включая не-https):

// Property indicating if this object will authorize plain http request
// (as well as any non-https requests.) Default is NO, only requests with the
// scheme https are authorized, since security may be compromised if tokens
// are sent over the wire using an unencrypted protocol like http.
@property (assign) BOOL shouldAuthorizeAllRequests;

По умолчанию для этого флага установлено значение false/NO. Чтобы обновить этот флаг для работы с моими запросами, я изменил его значение в методе обратного вызова OAUTH перед выполнением запросов API:

- (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController
      finishedWithAuth:(GTMOAuth2Authentication *)auth
                 error:(NSError *)error {
    [self dismissViewControllerAnimated:YES completion:nil];

    if (error != nil) {
        // Authentication failed
        ...
    } else {
        // Authentication succeeded
        ...

        // TODO: for development purposes only to use non-https....remove for release.
        auth.shouldAuthorizeAllRequests = YES;

        // Make some API calls
        ...
    }
}

После того, как я внес это изменение, библиотека iOS разрешила не-https запросы к локальному серверу разработки. Важно отметить, что этот флаг следует использовать только в целях разработки.

person Stephen Asherson    schedule 03.08.2013