Реализация OAuth 2 работает не так, как ожидалось

#angular #oauth #playframework-2.5

#angular #oauth #playframework-2.5

Вопрос:

Я новичок в реализации рабочего процесса OAuth2. Я тестирую Google OAuth2, и моя настройка выглядит следующим образом.

  1. Воспроизводите фреймворк на стороне сервера.
  2. Angular 2 для клиентской стороны.

Оба приложения находятся в одном и том же окне, но работают под разными портами. Тем не менее, у меня есть настройка прокси для моего запроса ajax на стороне клиента.

Основная часть работы выполняется на стороне сервера, где я обмениваю код, выданный Google, на токен. Все работает, когда я вручную тестирую его и ввожу свою конечную точку авторизации непосредственно на вкладке браузера. Я перенаправляюсь в Google, регистрируюсь, а затем перенаправляюсь на конечную точку авторизации, после чего выдается токен. При первом попадании в конечную точку авторизации отправляется ответ 303, и браузер автоматически перенаправляет на Google. После успешного входа в систему Google перенаправляет на мою конечную точку авторизации с кодом доступа в URL. Сервер считывает код доступа и отправляет его в Google в обмен на токен. Допустим, моя конечная точка авторизации http://localhost:8000/auth/google

Однако, когда я пытаюсь инициализировать поток из моего приложения angular 2 и отправить код, выданный Google, после успешного входа в Google. На стороне клиента я инициирую запрос в Google с redirect_uri, установленным для конечной точки авторизации http://localhost:8000/auth/google . После успешного входа в систему я прочитал код авторизации, возвращенный Google, и отправил его на сервер. В этом случае я получаю сообщение об ошибке, в котором говорится, что существует redirect_uri_mismatch .

Я не могу понять, почему эта настройка не будет работать. Ограничивает ли Google код доступа к определенному домену, то есть, если мое приложение angular запущено на порту 3000, действителен ли этот код доступа только для запросов, поступающих с этого порта?

Любая помощь была бы очень признательна, потому что я потратил часы, пытаясь выяснить, почему это не работает.

Ответ №1:

Вы зарегистрировали redirect_url в консоли? Вы подождали некоторое время после его регистрации? Это точно то же самое?

смотрите здесь: https://developers.google.com/identity/protocols/OAuth2InstalledApp

Ваше приложение должно зарегистрироваться в системе для пользовательской схемы URI, чтобы получить ответ авторизации. То, как ваше приложение регистрирует свою пользовательскую схему URI, зависит от платформы. Наши библиотеки и примеры демонстрируют некоторые специфичные для платформы реализации пользовательских перенаправлений схемы URI.

Если вы имеете дело с аутентификацией из клиентских веб-приложений, вы также можете рассмотреть возможность использования неявного потока предоставления вместо кода авторизации, который более прост и предназначен для проверки подлинности на стороне клиента: https://developers.google.com/identity/protocols/OAuth2UserAgent