#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()
функции, которые возвращают одно и то же значение.
Код работает нормально, и я вижу, что функции вызываются в таком порядке:
Oauth2AuthorizationCodeServlet#getUserId()
Oauth2AuthorizationCodeServlet#initializeFlow()
Oauth2AuthorizationCodeServlet#getRedirectUri()
Oauth2CallbackServlet#initializeFlow()
Oauth2CallbackServlet#getRedirectUrl()
Oauth2CallbackServlet#getUserId()
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 для разных вариантов использования.