Авторизация Google OAuth 2 - Ошибка: redirect_uri_mismatch

На веб-сайте https://code.google.com/apis/console Я зарегистрировал свое приложение, настроил сгенерированный идентификатор клиента: и Client Secret в мое приложение и попытался войти в систему с Google. К сожалению, я получил сообщение об ошибке:

Error: redirect_uri_mismatch
The redirect URI in the request: http://127.0.0.1:3000/auth/google_oauth2/callback did not match a registered redirect URI

scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
response_type=code
redirect_uri=http://127.0.0.1:3000/auth/google_oauth2/callback
access_type=offline
approval_prompt=force
client_id=generated_id

Что означает это сообщение и как его исправить? Я использую gem omniauth-google-oauth2.

314
задан 14 июля '12 в 19:08
источник поделиться
31 ответ
  • 1
  • 2

URI перенаправления (куда возвращается ответ) должен быть зарегистрирован в консоли API, и ошибка указывает на то, что вы этого не сделали или сделали не правильно.

Перейдите в консоль для вашего проекта и посмотрите под API Access. Там вы должны увидеть свой client ID client secret вместе со списком URI перенаправления. Если требуемый URI отсутствует в списке, нажмите "Изменить настройки" и добавьте URI в список.

РЕДАКТИРОВАТЬ: (Из комментария с высокой оценкой ниже) Обратите внимание, что обновление консоли API Google и это изменение может занять некоторое время. Обычно всего несколько минут, но иногда кажется, что это дольше.

316
ответ дан 14 июля '12 в 19:57
источник

В моем случае это был www и non-www URL. Фактический сайт имел www URL, а Авторизованные URI-адреса перенаправления в Google Developer Console имели non-www URL. Следовательно, было несоответствие в URI перенаправления. Я решил это, обновив Authorized Redirect URIs в Google Developer Console до www URL.

Другим общим несоответствием URI являются:

  • Использование http:// в Уполномоченных URI перенаправления и https:// в качестве фактического URL-адреса или наоборот
  • Использование конечной косой черты (http://example.com/) в URI с авторизованным перенаправлением и не использовать конечную косую черту (http://example.com) в качестве фактического URL-адреса или наоборот

Ниже приведены пошаговые скриншоты в Google Developer Console, поэтому было бы полезно, если бы пользователям было трудно найти страницу консоли разработчика для обновления URI редиректа.

Выберите свой проект

  1. Нажмите на значок меню

Нажмите значок меню

  1. Нажмите API Manager меню

Выбрать меню API-менеджера

  1. Нажмите Credentials меню. И под OAuth 2.0 Client IDs вы найдете свое имя клиента. В моем случае это Web Client 1. Нажмите на него, и появится всплывающее окно, в котором вы сможете редактировать Авторизованный Javascript Origin и Разрешенные URI-адреса перенаправления.

Выбрать меню учетных данных

Вот статья Google о создании проекта и идентификатора клиента.

79
ответ дан 25 дек. '15 в 14:19
источник

Если вы используете кнопку Google+ javascript, то вместо фактического URI вы должны использовать postmessage. Мне потребовался почти целый день, чтобы понять это, поскольку Google-документы не ясно излагают это по какой-то причине.

76
ответ дан 24 сент. '13 в 22:22
источник

Для моего веб-приложения я исправил свою ошибку, написав

instead of : http://localhost:11472/authorize/
type :      http://localhost/authorize/
36
ответ дан 19 окт. '14 в 9:59
источник

Обязательно проверьте протокол "http://" или "https://" как протокол проверки google. Лучше добавить оба URL в список.

29
ответ дан 12 февр. '14 в 16:48
источник

В любом потоке, где вы GoogleAuth.grantOfflineAccess() код авторизации на стороне клиента, например API GoogleAuth.grantOfflineAccess(), и теперь вы хотите передать код на свой сервер, выкупить его и сохранить токены доступа и обновления, тогда у вас есть для использования литералов postmessage вместо redirect_uri.

Например, построив фрагмент в документе Ruby:

client_secrets = Google::APIClient::ClientSecrets.load('client_secrets.json')
auth_client = client_secrets.to_authorization
auth_client.update!(
  :scope => 'profile https://www.googleapis.com/auth/drive.metadata.readonly',
  :redirect_uri => 'postmessage' # <---- HERE
)

# Inject user auth_code here:
auth_client.code = "4/lRCuOXzLMIzqrG4XU9RmWw8k1n3jvUgsI790Hk1s3FI"
tokens = auth_client.fetch_access_token!
# { "access_token"=>..., "expires_in"=>3587, "id_token"=>..., "refresh_token"=>..., "token_type"=>"Bearer"}

Единственной документацией Google, которая даже упоминает postmessage является старый документ Google+. Совершенно непростительно, что на странице doc для автономного доступа это не упоминается. #FacePalm

14
ответ дан 05 янв. '18 в 23:51
источник

Это кажется довольно странным и раздражающим, что нет "одного" решения. для меня http://localhost:8000 не сработало, но http://localhost:8000/ разработано.

7
ответ дан 03 июня '15 в 18:16
источник

При регистрации своего приложения в https://code.google.com/apis/console и введите идентификатор клиента, вы получите возможность указать один или несколько перенаправлений URIs. Значение параметра redirect_uri в вашем URI авторизации должно точно соответствуют одному из них.

6
ответ дан 21 авг. '13 в 16:57
источник

2015July15 - подпись, которая работала на прошлой неделе с этим script при входе

<script src="https://apis.google.com/js/platform.js" async defer></script>

перестает работать и начинает вызывать ошибку 400 с помощью Error: redirect_uri_mismatch

и в разделе DETAILS: redirect_uri=storagerelay://...

я решил это, изменив на:

<script src="https://apis.google.com/js/client:platform.js?onload=startApp"></script>
5
ответ дан 15 июля '15 в 19:38
источник

URL-адрес перенаправления чувствителен к регистру.

В моем случае я добавил оба: http://localhost:5023/AuthCallback/IndexAsync http://localhost:5023/AuthCallback/IndexAsync

4
ответ дан 28 сент. '16 в 12:42
источник

Контрольный список:

  • http или https?
  • & или &amp;?
  • конечная косая черта (/) или откройте ?
  • (CMD/CTRL)+F, найдите точное совпадение на странице учетных данных. Если не найден, затем найдите отсутствующий.
  • Подождите, пока Google не обновит его. Может случиться каждые полчаса, если вы часто меняются или могут оставаться в бассейне. Для моего случая было почти полчаса вступить в силу.
4
ответ дан 16 февр. '16 в 12:07
источник

Если вы используете этот учебник: https://developers.google.com/identity/sign-in/web/server-side-flow, тогда вы должны использовать "postmessage".

В GO это исправило проблему:

confg = &oauth2.Config{
        RedirectURL:  "postmessage",
        ClientID:   ...,
        ClientSecret: ...,
        Scopes:      ...,
        Endpoint:     google.Endpoint,
}
2
ответ дан 04 июня '17 в 21:03
источник

Удаляет пользователей (из omniauth-google-oauth2 docs):

Несоответствие протокола Fixing для redirect_uri в Rails

Просто установите full_host в OmniAuth на основе Rails.env.

# config/initializers/omniauth.rb

OmniAuth.config.full_host = Rails.env.production?? 'https://domain.com': 'http://localhost:3000'

ПОМНИТЕ: Не включайте конечный "/"

2
ответ дан 23 февр. '16 в 6:48
источник

В моем случае мой учетный тип Тип приложения - "Другое". Поэтому я не могу найти Authorized redirect URIs на странице учетных данных. Кажется, это выглядит в виде приложения: "Веб-приложение". Но вы можете нажать кнопку Download JSON, чтобы получить файл client_secret.json. введите описание изображения здесь

Откройте json файл, и вы можете найти такой параметр: "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]. Я предпочитаю использовать http://localhost, и он отлично подходит для меня.

2
ответ дан 12 марта '16 в 8:31
источник

остерегайтесь дополнительных / в конце URL-адреса http://localhost:8000 отличается от http://localhost:8000/

2
ответ дан 12 июля '17 в 10:22
источник

Кто-то изо всех сил пытается найти, где задать URL-адреса перенаправления в новой консоли: API и Auth → Учетные данные → Идентификаторы клиента OAuth 2.0 → Нажмите ссылку, чтобы найти все ваши URL-адреса перенаправления

1
ответ дан 21 окт. '15 в 14:37
источник

Позвольте мне заполнить @Bazyl ответ: в сообщении, которое я получил, они упомянули URI "http://localhost:8080/" (что, конечно, кажется внутренней конфигурацией Google). Я изменил разрешенный URI для этого, "http://localhost:8080/", и сообщение больше не появилось... И видео загрузилось... Документация APIS ОЧЕНЬ хрома... Каждый раз, когда у меня что-то работает с google apis, я просто чувствую себя "счастливым", но есть недостаток хорошей документации об этом....:( Да, я получил его работу, но я еще не понимаю ни, почему это не удалось, ни почему это сработало... Было только ОДНО место, чтобы подтвердить URI в в Интернете, и он был скопирован в client_secrets.json... Я не понимаю, есть ли ТРЕТЬЕ место, где нужно написать тот же URI... Я нахожу, но не только документацию, но и графический интерфейс Google api вполне хромой...

1
ответ дан 22 авг. '14 в 17:39
источник

Ни один из вышеперечисленных решений не работал у меня. ниже

изменить разрешенные URL-адреса перенаправления на - https://localhost:44377/signin-google

Надеюсь, это поможет кому-то.

1
ответ дан 04 нояб. '16 в 17:54
источник

Попробуйте выполнить следующие проверки:

  • Идентификатор пакета в консоли и в вашем приложении. Я предпочитаю установить Bundle ID приложения как этот "org.peredovik. ${PRODUCT_NAME: rfc1034identifier}"
  • Убедитесь, что вы добавили типы URL-адресов на вкладке Info, просто введите свой идентификатор Bundle в идентификаторе и схемах URL-адресов, роль установлена ​​в редакторе
  • В консоли на cloud.google.com "APIs and auth" → "Экран согласия" заполните форму о вашем приложении. "Имя продукта" - обязательное поле.

Наслаждайтесь:)

0
ответ дан 02 янв. '14 в 19:49
источник

Чтобы он работал на локальном хосте и, если он используется для веб-сервера, предоставьте

Authorized JavaScript origins (Client ID for web appication)
e.g. http://localhost:4200
0
ответ дан 18 янв. '19 в 11:48
источник

Хитрость заключается в том, чтобы ввести правильный URL-адрес перенаправления в точке создания идентификатора. Я обнаружил, что обновление URL-адреса перенаправления после того, как идентификатор был создан с помощью "Редактировать", просто не выполняет работу. Для меня также работало дублирование всей папки "vendor" и копирование ее в то же место, где находится файл "oauth" (до тех пор, пока вы успешно не сгенерируете токен, а затем не сможете удалить дубликат папки "vendor"). Это потому, что попытка указать на папку поставщика через "../vendor/autoload" не сработала для меня.

Итак, удалите существующий проблемный идентификатор клиента OAuth и попробуйте этот подход, он будет работать.

0
ответ дан 24 дек. '18 в 3:19
источник

В моем случае мне пришлось проверять тип идентификатора клиента для веб-приложений/установленных приложений.

установленные приложения: http://localhost [Перенаправление URI] В этом случае localhost просто работает

веб-приложения: вам нужно действительное имя домена [URI перенаправления:]

0
ответ дан 04 апр. '15 в 16:04
источник

У меня была такая же проблема с входом google, я собирался вытащить волосы! Я правильно ввел свои обратные вызовы в панели Google Credential на консоли разработчика Google здесь были мои URL-адреса перенаправления:

https://www.example.com/signin-google

https://www.example.com/signin-google/

https://www.example.com/oauth2callback

https://www.example.com/oauth2callback/

Кажется, все прекрасно? но он все еще не работал, пока я не добавил еще один магический Url. Я добавил signin-google url (который является обратным вызовом google по умолчанию) без www и проблема решена.

принять во внимание (в зависимости от вашего домена), вам может потребоваться или не нужно добавлять как с URL-адресами, так и без них

0
ответ дан 17 окт. '17 в 11:07
источник

У меня есть приложение frontend и backend api.

На моем серверном сервере я тестировал, нажав google api и столкнулся с этой ошибкой. В течение всего моего времени я задавался вопросом, почему мне нужно дать redirect_uri поскольку это всего лишь бэкэнд, для интерфейса это имеет смысл.

То, что я делал, давало разные redirect_uri (хотя и действительные) с сервера (при условии, что это просто placeholder, его просто нужно зарегистрировать только в google), но мой внешний код, который создал токен-код, был другим. Поэтому, когда я проходил этот код в своем тестировании на стороне сервера (для которого перенаправление-uri было другим), я столкнулся с этой ошибкой.

Так что не делайте этой ошибки. Убедитесь, что интерфейс redirect_uri такой же как ваш сервер, как Google использовать его для проверки подлинности.

0
ответ дан 18 нояб. '18 в 14:57
источник

Не забудьте указать путь после домена и ip. В моем случае я забыл:

/oauth2callback

0
ответ дан 19 нояб. '16 в 4:05
источник

У меня было два URI запроса в консоли, http://xxxxx/client/api/spreadsheet/authredirect и http://localhost.

Я попробовал все ответы на этот вопрос и подтвердил, что ни одна из них не была моей проблемой.

Я удалил localhost из Консоли, обновил my client_secret.json в своем проекте, и ошибка несоответствия исчезла.

0
ответ дан 12 апр. '17 в 15:59
источник

Что вам нужно сделать, вернитесь в свою консоль разработчика и перейдите на API и Auth > Consent Screen и заполните это. В частности, название продукта.

0
ответ дан 10 июня '15 в 11:15
источник

для меня это произошло потому, что в списке "Авторизованные переадресации URI" я неправильно разместил https://developers.google.com/oauthplayground/ вместо https://developers.google.com/oauthplayground (без / в конце),

0
ответ дан 13 нояб. '18 в 23:29
источник

Ниже приводятся причины ошибки: возникает проблема redirect_uri_mismatch:

  1. Перенести URL-адрес в проект google.
  2. URL-адрес перенаправления не совпадает с вашим сайтом
  3. Важный! Он будет работать только с рабочим доменом, например example.com, book.com и т.д. (Не работает с локальным хостом или URL-адресом AWS LB)

Рекомендуется использовать URL-адрес домена

0
ответ дан 07 дек. '18 в 15:44
источник

Мне нужно было создать новый идентификатор клиента в API и службах → Учетные данные → Создать учетные данные → OAuth → Другое

Затем я загрузил и использовал client_secret.json с моей программой командной строки, которая загружается на мою учетную запись youtube. Я пытался использовать идентификатор клиента OAuth для веб-приложений, который давал мне ошибку URI перенаправления в браузере.

0
ответ дан 29 дек. '17 в 3:41
источник
  • 1
  • 2

Другие вопросы по меткам или Задайте вопрос