Вопрос по ruby-on-rails – Почему Google Oauth возвращает `invalid redirect_urI` в моем приложении на Rails?

42

Я добавляю Google Oauth2 в приложение Rails, но не смог пройти ранние этапы.

Я установил приложение и определил идентификатор клиента и секрет. Но я получаюInvalid parameter value for redirect_uri: Non-public domains not allowed: http://localhost/path/to/callback

Что это значит? Это потому, что я тестирую в локальной среде разработчика?

Спасибо за любые идеи.

EDIT

Это может быть связано с тем, что URI приложения отличается от URI отправителя. Но когда я захожу в Google и пытаюсь авторизовать путь к моему приложению, я получаюOAuth2 redirect is invalid, Это ограничение использования локально размещенного приложения?

EDIT 2

Запрос, который я генерирую, выглядит следующим образом:

<code>https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=###########&redirect_uri=http%3A%2F%2Fmyapp.dev%2Fusers%2Fauth%2Fgoogle_oauth2%2Fcallback&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&approval_prompt=&access_type=offline
</code>

Это правильно. Я пробовал это с client_id, включая и исключая.apps.googleusercontent.com раздел. Ни то, ни другое не работает.

Не могли бы вы включить образец запроса? Я смог использовать oauth2 с локальными перенаправлениями очень хорошо, так что любопытно, что отличается в вашем запросе. Steve Bazyl
Вот как это выглядит для меня ... Попробуйте сделать ваше приложение общедоступным с переадресацией портов и использованием вашего WAN IP Kyle Macey
Спасибо, Стив, я добавил свой сгенерированный запрос к этому вопросу. Я использую Pow для обслуживания моего приложения. Может ли это быть проблемой? Возможно, мне нужно предоставить другой редирект? Хотя этот работал для других провайдеров. Цените любые идеи, которые у вас могут быть, этот поставил меня в тупик! Andy Harvey

Ваш Ответ

7   ответов
67

работающего в Ubuntu. Использование localhost не работает, так как принятый ответ выделен. Google хочет, чтобы общественное достояние.

Мое решение состояло в том, чтобы использовать & quot; example.com & quot; который является общедоступным и создает поддомен в моем файле / etc / hosts. Субдомен будет работать на моем локальном устройстве разработчика, и Google будет счастлив с доменом example.com. Я зарегистрировал редиректы через консоль гугл и у меня редирект сработал успешно.

Я добавил следующее в мой / etc / hosts:

192.168.33.100   devbox  devbox.example.com

В моем случае IP был тот из моей машины. Я мог бы также использовать 127.0.0.1 вместо этого.

Моя консоль Google API (https://code.google.com/apis/console) настроенный для нового идентификатора клиента был:

"Application Type: Web Application". Via "Your site or hostname (more options)": In "Authorized Redirect URIs" I entered http://devbox.example.com/ In "Authorized JavaScript Origins" I entered http://devbox.example.com/
Пробовал это, но не смог заставить его работать. Надеюсь, другим повезет больше, чем мне.
Это решение + xip.io работает для меня как на эмуляторах, так и на реальных телефонах. example.com не работает, потому что ни эмуляторы, ни телефоны не могут получить доступ к example.com, фальсифицированному хост-машиной s / etc / hosts xip.io предоставляет глобальный поддельный домен. ТАК это работает.
Я получил это, чтобы работать для демонстрационного приложения AdWords на Rails. Единственное отличие заключалось в том, что мне пришлось изменить «URI авторизованного перенаправления». в «Идентификатор клиента для веб-приложения»; настройки, так что это точно соответствуетredirect_uri в запросе указаны детали сообщения об ошибке.
Чтобы заставить это работать с pow, создайте символическую ссылку под названиемdefault в приложение, с которым вы работаете с~/.pow, Это сделает0.0.0.0 или же127.0.0.1 перейдите в приложение по умолчанию.
Используйте домен, отличный от localhost (local.mydomain.com), и используйте файл hosts для сопоставления поддельного домена с 127.0.0.1. Спасибо друг.
5

если у вас есть статический IP-адрес. я использовалhttp://www.displaymyhostname.com/ чтобы получить мое имя хоста. Я подключил его прямо вAuthorized JavaScript origins поле, когда я создал новыйWeb Application Client ID.

Постскриптум Имя моего хоста выглядело примерно так: 111.111.111.111.static.exetel.com.au

Это мой ответ на связанный вопросhttps://stackoverflow.com/a/23517146/1320083

работает как шарм!
2

кто нашел это, моей проблемой было сочетание нескольких вещей.

I could not get callbacks to work on a local machine. The console API console suggests it is possible, but I couldn't get it working. Not sure of this is down to the service, or to my network/ connection/ firewall/ etc.

In the API console you must specify the full redirect URI, not just the root url back to your app.

Google lists scope parameters here https://developers.google.com/gdata/faq#AuthScopes. It seems this information is outdated, and the correct format for these is now https://www.googleapis.com/auth/plus.me, https://www.googleapis.com/auth/youtube, etc. Maybe someone else can confirm this?

У меня также было несколько других вещей. Я написал полное объяснение по другому из моих вопросов здесь, на SO. К сожалению, мои комментарии были удалены, а не перемещены модератором, потому что я разместил не в том месте. Теперь я не могу вспомнить все, что я написал. Для других, сталкивающихся с подобной проблемой, не стесняйтесь комментировать, это может потрясти мою память, поэтому я могу предложить некоторые идеи

16

ния на лайкиhttp://your_pow_app.192.168.0.1.xip.io/user/auth/google_oauth2/callback

Проверено и работает.

@ Jek-fdrv Когда вы используете Pow, вы ссылаетесь на приложение по имени. Это имя будет использоваться для доступа к приложению в браузере. Это то же имя, которое вы можете использовать в качестве субдомена при использовании xip.io. Если вы обращаетесь к своему приложению с помощью helloapp.dev, замените your_pow_app на helloapp.
Что означает ваше приложение Pow?
Можете ли вы показать пример, потому что я думаю, что это должен быть URL, и пользователь будет перенаправлен на этот URL после запроса Google.
Вы можете найти подробную информацию о xip.io наxip.io и документация Пау наpow.cx
У меня нет никакого примера, потому что я больше не использую Pow. Но идея в том, что вы берете имя вашего приложения в Pow (например,helloapp) и без установки ничего оправданного использованияhelloapp.YOUR_LOCAL_IP.xip.io чтобы получить к нему доступ. Как объяснено наxip.io веб-сайт это просто запись DNS, которая указывает на YOUR_LOCAL_IP. В вашем приложении вы просто определяете URL обратного вызова, который хотите использовать (например,/user/auth/google_oauth2/callback). Как только это будет сделано, вы передадите этот URL в Google для перенаправления, и это все. Ничего более :)
0

которая создала Google URL. Я вставил разрывы строк в строку, после удаления разрывов строк URL снова сработал.

0

когда вы ввели неверный идентификатор пакета в проекте консоли разработчиков Google, который не совпадает с идентификатором пакета вашего приложения. Убедитесь, что ваш идентификатор клиента и идентификатор пакета соответствуют значениям, отображаемым в консоли разработчика.

-2

но обнаружил, что это действительно не проблема. Как объяснилв моем блоге вы можете использовать общедоступный URI перенаправления, даже если вы работаете на своем компьютере разработки localhost. Google просто вернет код авторизации в общедоступный URI, где вы можете вырезать и вставить его на свой локальный компьютер.

Похожие вопросы