Какова связь между AbstractAuthorizationCodeServlet и AbstractAuthorizationCodeCallbackServlet?

#java #google-cloud-platform #oauth-2.0 #google-oauth #google-oauth-java-client

#java #google-облачная платформа #oauth-2.0 #google-oauth #google-oauth-java-client

Вопрос:

Я пытаюсь понять этот пример проекта, который использует библиотеку OAuth отGoogle, чтобы пользователи могли входить в свою учетную запись Google.

В частности, я пытаюсь понять взаимосвязь между Oauth2AuthorizationCodeServlet.java и Oauth2CallbackServlet.java. Я знаю, что библиотека OAuth 2.0 от Google использует их для запуска потока авторизации и обработки результата после входа пользователя в систему, и я прочитал документацию для обоих абстрактных классов, но мне интересно, почему оба класса должны повторять одну и ту же логику?

  • Оба класса определяют getUserId() функции, которые возвращают одно и то же значение.
  • Оба класса определяют initializeFlow() функции, которые возвращают одно и то же значение.
  • Оба класса определяют getRedirectUri() функции, которые возвращают одно и то же значение.

Код работает нормально, и я вижу, что функции вызываются в таком порядке:

  1. Oauth2AuthorizationCodeServlet#getUserId()
  2. Oauth2AuthorizationCodeServlet#initializeFlow()
  3. Oauth2AuthorizationCodeServlet#getRedirectUri()
  4. Oauth2CallbackServlet#initializeFlow()
  5. Oauth2CallbackServlet#getRedirectUrl()
  6. Oauth2CallbackServlet#getUserId()
  7. Oauth2CallbackServlet#onSuccess()

Но мне интересно, зачем нужны повторяющиеся функции в Oauth2CallbackServlet .

Почему библиотека OAuth 2.0 от Google не может использовать значения, возвращаемые первым классом? Будет ли когда-нибудь иметь смысл, чтобы соответствующие функции возвращали разные значения? Например, будет ли когда-нибудь иметь смысл, чтобы их getRedirectUrl() функции возвращали разные URL-адреса?

Ответ №1:

Вот упрощенная схема входа в систему Google oauth.

введите описание изображения здесь

Номер 1. здесь представляет Oauth2AuthorizationCodeServlet

Номер 2. здесь представляет Oauth2CallbackServlet

Это два разных сервлета, отвечающих за отдельные части потока входа в систему. 1 — перенаправляет пользователя на форму входа в Google с некоторыми параметрами URL, такими как URL перенаправления. 2 — обрабатывает обратный вызов после завершения входа пользователя в систему, этот сервлет может получать доступ к информации о пользователе из Google, выполнять действия от имени пользователя в Google и т.д.

Чтобы ответить на ваши вопросы:

Почему библиотека OAuth 2.0 от Google не может использовать значения, возвращаемые первым классом?

Это два отдельных сервлета — было бы неправильно выполнять обмен данными между двумя отдельными сервлетами.

Будет ли когда-нибудь иметь смысл, чтобы соответствующие функции возвращали разные значения? Например, будет ли когда-нибудь иметь смысл, чтобы их функции getRedirectUrl() возвращали разные URL-адреса?

В обычном сценарии я не думаю, что имеет смысл возвращать разные значения из этих сервлетов, но, возможно, существует какой-то экзотический сценарий, когда вам нужно поддерживать несколько URL-адресов обратного вызова входа в Google для разных вариантов использования.