#c# #.net #oauth-2.0
#oauth #oauth-2.0 #google-oauth
Вопрос:
Я внедрил Google OAuth на сайте (example.com ). Все работает нормально, кроме авторизации из поддоменов на моем сайте (у меня тысячи поддоменов). Когда пользователь пытается авторизоваться через поддомен, например
fr.example.com
product1.example.com
product2.de.example.com
Я получаю сообщение об ошибке от Google —
The redirect URI in the request did not match a registered redirect URI
Как это можно решить?
Ответ №1:
В других ответах уже разъяснялось, что причина проблем заключается в том, что OpenAuth от Google не поддерживает поддомены с подстановочными знаками. Однако вы спрашиваете, как это можно решить? Ну, у вас есть два варианта, согласно этой теме электронной почты:
-
Предоставьте единую конечную точку обработки OAuth2 для всех поддоменов. То есть у вас будет основной домен и конечная точка, через которые вы также выполняете аутентификацию для поддоменов. По завершении аутентификации вы перенаправляетесь обратно на поддомен. Предположительно, существует параметр состояния OpenAuth, в котором вы можете закодировать имя поддомена. Вот что я сделал, вот код: https://github.com/debiki/debiki-server/blob/master/app/controllers/LoginWithOpenAuthController.scala
-
Вы можете зарегистрировать каждый поддомен независимо в Google.
Какой вариант вы выберете, зависит от того, какой бренд пользователям Google предлагается одобрить. Основной домен или поддомен?
Комментарии:
1. «Вы можете зарегистрировать каждый поддомен независимо в Google» Как?
2. Насколько я помню, когда вы настраиваете OpenAuth в Google Developer Tools, вы также указываете конечную точку OpenAuth на своем сервере. Затем перечислите поддомены, которые вы хотели бы использовать, например:
https://sub.domain.com/authenticate/google
,https://sub2.domain.com/authenticate/google
и так далее. Что может быть сложно, если вам нужно сделать это автоматически. Я не знаю, есть ли у Google какой-либо API для автоматического добавления конечных точек OpenAuth.3. Однако я этого не делал. Вместо
*.domain.com
этого, например, когда пользователь включенsub5.domain.com
, я перенаправляю его / ее наlogin.domain.com
этот домен и регистрируюсь через него. Итак, единственная конечная точка, которую я перечислил в Google OpenAuth, этоhttps://login.domain.com/authenticate/google
. И когда кто-то входит в систему, Google всегда спрашивает, хочет ли он / она доверять этому домену, а неsub5
. Затем я гарантирую, что пользователь войдет в систему с помощью файлов cookie и кэша на стороне сервера и перенаправленийsub5
.4. Пожалуйста, добавьте 1 к отслеживанию проблем, если вам нужна поддержка поддоменов или API issuetracker.google.com/issues/35898945
Ответ №2:
Это потому, что OAuth Google не поддерживает сопоставление поддоменов с подстановочными знаками. Вы можете обратиться к дополнительной документации здесь
Комментарии:
1. На связанной странице не упоминаются поддомены; помните, где вы читали, что OAuth от Google не поддерживает поддомены?
2. @KajMagnus Он поддерживает поддомены, но не сопоставляет поддомены с подстановочными знаками. По сути, redirect_uri должен точно соответствовать одному из значений, зарегистрированных в консоли разработчика. Таким образом, вы можете добавить кучу redirect_uri для своих поддоменов, и это должно сработать.
3. Спасибо. (Поддомены с подстановочными знаками — это то, что я имел в виду.)
4. @anfab Вы не знаете, можно ли добавить redirect_uris через API Google или это должно быть через веб-интерфейс?
5. У меня также возникли проблемы с подчеркиванием и дефисами в поддоменах. Хотя они технически допустимы, система Google OAuth, похоже, не разрешает их в разрешенных URI перенаправления. Я ничего не нашел в документации по этому вопросу.
Ответ №3:
URI перенаправления должен точно соответствовать одному из значений, перечисленных для этого проекта в консоли разработчиков Google (включая схему http или https, регистр и завершающий символ ‘/’). Таким образом, он не будет поддерживать поддомены, если вы не добавите их в консоль разработчика.
Комментарии:
1. Для справки: developers.google.com/accounts/docs /…
Ответ №4:
Это потому, что OAuth Google не поддерживает сопоставление поддоменов с подстановочными знаками.Вы можете перенаправить одну статическую страницу всего поддомена и после аутентификации или получения токена доступа OAuth вернуться на страницу своего поддомена с токеном доступа.
Ответ №5:
В поле Авторизованные источники JavaScript введите источник для вашего приложения. Вы можете ввести несколько источников, чтобы ваше приложение могло работать на разных протоколах, доменах или поддоменах. Вы не можете использовать подстановочные знаки. В приведенном ниже примере второй URL-адрес может быть рабочим URL-адресом.
http://localhost:8080 или https://myproductionurl.example.com
https://developers.google.com/identity/sign-in/web/server-side-flow