Google OAuth 2 authorization - Error: redirect_uri_mismatch

Refresh

November 2018

Views

389.6k time

308

On the website https://code.google.com/apis/console I have registered my application, set up generated Client ID: and Client Secret to my app and tried to log in with Google. Unfortunately, I got the error message:

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

What does mean this message, and how can I fix it? I use the gem omniauth-google-oauth2.

29 answers

36

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

instead of : http://localhost:11472/authorize/
type :      http://localhost/authorize/
0

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

Установленные приложения: HTTP: // локальный [Перенаправление URIs] В этом случае LOCALHOST просто работает

веб-приложения: Вам необходимо действительное доменное имя [Перенаправление URIs:]

4

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

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

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

1

Любой изо всех сил, чтобы найти, где установить Перенаправление в новой консоли: APIs & Auth -> Учетные данные - идентификаторы> OAuth клиента 2,0 -> Нажмите на ссылку, чтобы найти все ваши Перенаправление

0

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

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

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

https://www.example.com/oauth2callback

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

каждая вещь кажется тонкой правильно? но он все еще не работал , пока я добавил еще один магический Url я добавил зарегистрировались-Google URL (который по умолчанию Google вызов) без WWW и проблема решена.

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

2

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

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

confg = &oauth2.Config{
        RedirectURL:  "postmessage",
        ClientID:   ...,
        ClientSecret: ...,
        Scopes:      ...,
        Endpoint:     google.Endpoint,
}
11

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

Например, основываясь на фрагменте кода в документе Рубина :

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's 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+ , войдите в доке . Это совершенно непростительно , что страница документа для автономного доступа не упоминает об этом. #FacePalm

2

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

0

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

0

У меня есть приложение, внешние и внутренний API.

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

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

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

0

Попробуйте сделать эти проверки:

  1. Bundle ID в консоли и в приложении. Я предпочитаю установить Bundle идентификатор приложения, как этот "org.peredovik $. {PRODUCT_NAME: rfc1034identifier}"
  2. Проверьте, если вы добавили типы URL на вкладке Info просто введите свой Bundle идентификатор идентификатор и URL-схемы, роль установить Редактор
  3. В консоли в cloud.google.com «API-интерфейсы и авторизация» -> «экран Согласие» заполнить форму о приложении. «Название» требуется поле.

Наслаждаться :)

78

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

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

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

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

  1. Перейти к https://console.developers.google.com

  2. Выберите проект

Выберите проект

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

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

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

Меню менеджера Выберите API

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

Меню Выбор учетных данных

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

1

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

изменить разрешенные Перенаправление к - https: // локальный: 44377 / Google-входа в аккаунт

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

2

Рельсы пользователей (от OmniAuth-Google-oauth2 документов):

Закрепление протокол Рассогласования для redirect_uri в Rails

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

# Конфиг / Инициализаторы / omniauth.rb

OmniAuth.config.full_host = Rails.env.production? ? ' Https://domain.com ': ' HTTP: // локальный: 3000 '

ПОМНИТЕ: Не включайте замыкающий «/»

29

Убедитесь в том, чтобы проверить протокол «HTTP: //» или «https: //», как Google проверяет протокол, а также. Лучше добавить как URL в списке.

0

У меня было два запроса URI , в консоли, HTTP: // ххххх / клиент / API / таблицы / authredirect и HTTP: // локальный .

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

Я удалил Localhost с консоли, обновил свой client_secret.json в моем проекте, и ошибка несоответствия ушла.

2

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

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

0

Не забудьте указать путь после вашего домена и IP. В моем случае, я забыл:

/ oauth2callback

-3

ОБНОВЛЕНО -> РАБОТА для Android приложений

Просто используйте:

HTTP: // локальный / oauth2callback

если вы регулируете свою собственную логику без перенаправления ссылки для веб-приложений

7

Это кажется довольно странным и раздражает , что нет «один» решения не существует. для меня HTTP: // локальный: 8000 не разработан , но HTTP: // локальный: 8000 / разработаны.

0

Мне нужно создать новый идентификатор клиента под API, и услуги -> мандатной -> Создать учетные данные -> OAuth -> Другое

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

6

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

0

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

1

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

0

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

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

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

4

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

В моем случае я добавил как: Http: // Localhost: 5023 / AuthCallback / IndexAsync HTTP: // локальный: 5023 / authcallback / indexasync

h3n
306

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

Перейдите в консоль для вашего проекта и смотрите под API Access. Вы должны увидеть ваш идентификатор клиента & секрет там, вместе со списком перенаправления URI. Если URI вы хотите нет в списке, выберите Параметры редактирования и добавления URI в список.

EDIT: (Из высоко оценил комментарий ниже) Обратите внимание, что обновление консоли API Google и что изменение присутствия может занять некоторое время. Как правило, всего несколько минут, но иногда кажется, больше.

5

2015July15 -, что зарегистрировались работал на прошлой неделе с помощью этого сценария на входе

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

перестал работать и начал причиной ошибки 400 с Error: redirect_uri_mismatch

и в разделе ДЕТАЛЯХ: redirect_uri=storagerelay://...

я решил ее изменения в:

<script src="https://apis.google.com/js/client:platform.js?onload=startApp"></script>