Авторизация Google OAuth 2-Ошибка: несоответствие uri перенаправления
на сайте https://code.google.com/apis/console я зарегистрировал свое приложение, настроил сгенерированный идентификатор клиента: и Ключ в мое приложение и попытался войти в систему с помощью 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
что значит это сообщение и как я могу это исправить? Я использую камень omniauth-Google-на что OAuth2.
26 ответов
URI перенаправления (куда возвращается ответ) должен быть зарегистрирован в консоли API, и ошибка указывает, что вы не сделали этого или не сделали это правильно.
перейдите к консоли для вашего проекта и посмотрите в разделе доступ к API. Вы должны увидеть свой идентификатор клиента и секрет там, вместе со списком URI перенаправления. Если нужного URI нет в списке, нажмите кнопку Изменить параметры и добавьте URI в список.
в моем случае это был www
и non-www
URL-адрес. Фактический сайт имел www
URL и Авторизованный Перенаправление URIs в консоли разработчика Google было non-www
URL-адрес. Следовательно, было несоответствие в перенаправлении URI. Я решил это, обновив Authorized Redirect URIs
в консоли разработчика Google для www
URL-адрес.
другие общие несоответствия URI:
- используя
http://
в авторизованном перенаправлении URIs иhttps://
как фактический URL, или наоборот - используя Слэш (
http://example.com/
) в авторизованном перенаправлении URIs и не используя конечную косую черту (http://example.com
) как фактический URL, или наоборот
вот пошаговые скриншоты консоли разработчика Google, так что это было бы полезно для тех, кто получает его трудно найти страницу консоли разработчика для обновления перенаправления URIs.
выберите проект
- нажмите на значок меню
- нажать на кнопку
API Manager
меню
- нажать на кнопку . И под
OAuth 2.0 Client IDs
, вы найдете своего клиента имя. В моем случае этоWeb Client 1
. Нажмите на него, и появится всплывающее окно, где вы можете редактировать Авторизованный Javascript Origin и авторизованный перенаправление URIs.
вот статья Google на создание проекта и ID клиента.
Если вы используете кнопка Google + javascript, то вы должны использовать postmessage
вместо фактического URI. Мне потребовался почти целый день, чтобы понять это, так как документы Google по какой-то причине не ясно заявляют об этом.
для моего веб-приложения я исправил свою ошибку, пишет
instead of : http://localhost:11472/authorize/
type : http://localhost/authorize/
обязательно проверьте протокол " http://" или " https://", как google проверяет протокол. Лучше добавить оба URL в список.
в любом потоке, где вы извлекли код авторизации на стороне клиента, например GoogleAuth.grantOfflineAccess()
API, и теперь вы хотите передать код на свой сервер, выкупить его и сохранить токены доступа и обновления, тогда вам нужно использовать литеральную строку postmessage
вместо redirect_uri.
например, основываясь на фрагменте в Ruby doc:
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 + вход в doc. Это абсолютно непростительно, что страница doc для автономного доступа не упоминает об этом. #FacePalm
Это кажется довольно странным и раздражающим, что нет" одного " решения. для меня http://localhost:8000 не получилось, но http://localhost:8000/ сработало.
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>
при регистрации приложения вhttps://code.google.com/apis/console и
сделайте идентификатор клиента, вы получите возможность указать одно или несколько перенаправлений
идентификатор URI. Значение redirect_uri
параметр на вашем URI auth должен
точно совпадают с одним из них.
контрольные вопросы:
-
http
илиhttps
? -
&
или&
? - косая черта(
/
) или?
-
(CMD/CTRL)+F
поиск точного соответствия в учетных страницы. Если не найден тогда поиск пропавшего. - подождите, пока google обновит его. Может произойти в каждые полчаса, если вы часто меняются или могут остаться в бассейне. Для моего случая это заняло почти полчаса.
url перенаправления чувствителен к регистру.
в моем случае я добавил оба: http://localhost:5023/AuthCallback/IndexAsync http://localhost:5023/authcallback/indexasync
пользователи Rails (из omniauth-Google-на что OAuth2 docs):
исправление несоответствия протокола для redirect_uri в Rails
просто установите full_host в OmniAuth на основе рельсов.env.
# config / инициализаторы / omniauth.rb
OmniAuth.конфиг.full_host = рельсы.env.производство? ? 'https://domain.com' : 'http://localhost:3000'
помните: не включать трейлинг "/"
в моем случае мой тип приложения учетных данных - "другое". Поэтому я не могу найти Authorized redirect URIs
на странице учетных данных. Кажется, появляется в типе приложения:"веб-приложение". Но вы можете нажать для получения .
откройте файл json, и вы можете найти такой параметр:"redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
. Я выбираю использовать http://localhost и она отлично работает для меня.
Если вы используете этот учебник:https://developers.google.com/identity/sign-in/web/server-side-flow тогда вы должны использовать "postmessage".
в GO это исправило проблему:
confg = &oauth2.Config{
RedirectURL: "postmessage",
ClientID: ...,
ClientSecret: ...,
Scopes: ...,
Endpoint: google.Endpoint,
}
позвольте мне завершить ответ @ Bazyl: в сообщении, которое я получил, они упомянули URI
"http://localhost:8080/"
(что, конечно, кажется внутренней конфигурацией google). Я изменил авторизованный URI для этого,
"http://localhost:8080/"
, и сообщение больше не появится... И видео загрузили... Документация API очень хромает... Каждый раз, когда у меня что-то работает с Google apis, я просто чувствую себя "счастливым", но нет хорошей документации об этом.... : (Да, у меня это работает, но я не и все же не понимаю, почему это не удалось и почему это сработало... Было только одно место для подтверждения URI в интернете, и он был скопирован в client_secrets.формат JSON... Я не понимаю, есть ли третье место, где нужно написать тот же URI... Я нахожу не только документацию, но и дизайн GUI api Google довольно хромым...
любой, кто пытается найти, где установить URL-адреса перенаправления в новой консоли: APIs & Auth - > учетные данные - > идентификаторы клиентов OAuth 2.0 - > нажмите ссылку, чтобы найти все ваши URL-адреса перенаправления
ни одно из вышеперечисленных решений не сработало для меня. ниже ли
изменить авторизованные URL-адреса перенаправления на - https://localhost:44377/signin-google
надеюсь, это кому-то поможет.
остерегайтесь дополнительных /
в конце url-адреса
http://localhost:8000
отличается от http://localhost:8000/
попробуйте сделать эти проверки:
- Bundle ID в консоли и в вашем приложении. Я предпочитаю установить идентификатор пакета приложения, как это " org."передовик".${PRODUCT_NAME:rfc1034identifier}"
- проверьте, если вы добавили типы URL на вкладке Info просто введите идентификатор пакета в схемах идентификаторов и URL, роль установлена в Editor
- в консоли на cloud.google.com "APIs & auth" - > "экран согласия" заполните форму о вашей заявке. "Название продукта" обязательно поле.
наслаждайтесь :)
в моем случае мне пришлось проверить тип идентификатора клиента для веб-приложений / установленных приложений.
установленные приложения: http://localhost [Перенаправление URIs] В этом случае localhost просто работает
веб-приложения: вам нужно действительное доменное имя [перенаправление URIs:]
Что вам нужно сделать, это вернуться к консоли разработчика и перейти к APIs & Auth > экран согласия и заполнить это. В частности, название продукта.
У меня было два запроса URIs в консоли,http://xxxxx/client/api/spreadsheet/authredirect и http://localhost.
Я попробовал все лучшие ответы на этот вопрос и подтвердил, что ни одна из них не была моей проблемой.
Я удалил localhost из консоли, обновил client_secret.JSON в моем проекте, и ошибка ушла.
У меня была та же проблема с входом в google, я собирался вытащить волосы!!! Я правильно ввел свои обратные вызовы на панели учетных данных google в консоли разработчика 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-адресами www, так и без них
Мне нужно было создать новый идентификатор клиента в API & Services - > учетные данные - > создать учетные данные - > OAuth - > Other
затем я загрузил и использовал client_secret.json с моей программой командной строки, которая загружается в мою учетную запись youtube. Я пытался использовать идентификатор клиента OAuth веб-приложения, который давал мне ошибку URI перенаправления в браузере.
обновлено -- > работа для приложений Android
просто использовать:
Если вы обрабатываете свою собственную логику без ссылки перенаправления для веб-приложений