Подтвердить что ты не робот

Использование веб-потока Google Oauth2 от iOS + Bonjour (Yikes!)

Я создаю приложение iOS, которое требует от пользователя авторизации API Google через Oauth2, используя веб-поток на стороне сервера. В настоящее время я открываю UIWebView для запуска потока oauth2.

Это отлично работает в симуляторе, потому что я устанавливаю URI перенаправления на http://localhost и сервер работает на моей локальной машине.

Тем не менее, я хотел бы протестировать устройство, все еще подключаясь к серверу, работающему на моем рабочем столе. Для этого у меня появилось приложение для открытия моего рабочего адреса (локального IP-адреса подсети или адреса bonjour, например http://foo.local.), для подключения к серверу. Однако поток Google Oauth2 говорит о том, что он не может использовать локальный URI в качестве URL-адреса перенаправления.

Есть ли способ обойти это? Я бы не захотел возиться с настройками локальной сети или прокси с моего устройства IOS, если это вообще возможно. В идеале я также хотел бы использовать сервис bonjour для открытия сервера, потому что у нас есть команда разработчиков, и наше приложение позволяет вам выбирать, какой сервер в локальной сети вы хотите подключить.

Функции

4b9b3361

Ответ 1

Я решил это решить, приняв следующий подход.

В моем UIWebView я перехватил все запросы на загрузку и изменил URL. В принципе, я установил redirect_uri в нечто общедоступное (это также зарегистрировано на консоли api), но когда UIWebView пытается загрузить этот URI переадресации (после нескольких переадресаций), я переписываю этот URL, чтобы вместо этого указывать на обратный вызов на моем mac on локальной сети.

Очевидно, это нужно учитывать при анализе маркера на стороне сервера.

Ответ 2

Обновлено 19/03/2013

Если у сервера должен быть средний человек, то я могу найти самый простой способ - захватить имя домена и сделать сервер открытым. www.godaddy.com или любой поставщик доменных имен получит доменное имя примерно за 15 долларов США в год (будет ниже, если есть скидка).

После этого просто выполните поиск, как получить динамический DNS и настройте redirect_uri в качестве имени домена, которое было выбрано.

В противном случае я не видел, чтобы роль сервера играла здесь, если только для цели oauth. В качестве второго метода, приведенного ниже, устройство может напрямую связываться с сервером google даже за сильно защищенной огневой стеной. (токен будет передан в строку заголовка).

Так может потребоваться некоторое clairification здесь.

Будет ли сервер localhost действовать как концентратор для обнуления файлов с диска Google, а затем перераспределить на устройства iOS? Или какая архитектура сети хотела бы получить здесь?

==

Обновлено 18/03/2013

в соответствии с официальным документом https://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi

Есть два способа oauth. использование localhost как перенаправления - это всего лишь один из способов.

другой должен использовать эту строку

urn:ietf:wg:oauth:2.0:oob

чтобы заменить запрос, где у него есть локальный хост.

Например, предыдущий запрос с localhost (обратите внимание: разница находится в средней строке, начинающейся с 'redirect_uri =')

    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&
redirect_uri=http://localhost:9004&
response_type=code&client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com

теперь можно изменить на

    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
response_type=code&client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com

поэтому доступ к URL-адресу первого в симуляторе должен быть эквивалентен доступу к последнему в реальном устройстве.

гало

Ответ 3

Не могли бы вы попробовать этот подход? Добавьте в свой /etc/hosts файл в Mac OSX следующее:

192.168.33.100   trialapp  trialapp.com #put your local IP address instead of 192.168.33.100

Перейти к консоли Google API настроить новый идентификатор клиента и изменить URL-адрес перенаправления на http://trialapp.com/

  • "Тип приложения: веб-приложение".
  • Через "Ваш сайт или имя хоста (дополнительные параметры)":
    • В "Авторизованных URI-адресах перенаправления" введите http://trialapp.com/
    • В "Авторизованных источниках JavaScript" введите http://trialapp.com/

Что мы делаем, это сопоставление вашего IP-адреса локальной подсети с именем домена псевдонима. Поэтому Google больше не должен думать, что это локальный адрес. Посмотрите, работает ли это?