Упрощенная интеграция с OAuth и вход через Google.

Обзор

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

Для привязки учетной записи к OAuth и входа через Google выполните следующие общие шаги:

  1. Сначала попросите пользователя дать согласие на доступ к его профилю Google.
  2. Используйте информацию из их профиля, чтобы проверить, существует ли учетная запись пользователя.
  3. Для существующих пользователей необходимо связать учетные записи.
  4. Если вы не можете найти совпадение с пользователем Google в вашей системе аутентификации, проверьте токен идентификации, полученный от Google. Если ваш сервис поддерживает создание учетных записей, вы можете создать пользователя на основе информации профиля, содержащейся в токене идентификации.
На этом рисунке показаны шаги, необходимые пользователю для привязки своей учетной записи Google с помощью упрощенного процесса привязки. На первом скриншоте показано, как пользователь может выбрать ваше приложение для привязки. На втором скриншоте пользователь может подтвердить, есть ли у него уже существующая учетная запись в вашем сервисе. На третьем скриншоте пользователь может выбрать учетную запись Google, с которой он хочет привязать свою учетную запись. На четвертом скриншоте показано подтверждение привязки учетной записи Google к вашему приложению. На пятом скриншоте показана успешно привязанная учетная запись пользователя в приложении Google.
Связывание учетных записей на телефоне пользователя с помощью упрощенной процедуры связывания.

Рисунок 1. Привязка учетной записи на телефоне пользователя с помощью упрощенной привязки.

Упрощенная интеграция: OAuth + вход через Google Flow

На следующей диаграмме подробно описаны взаимодействия между пользователем, Google и вашей конечной точкой обмена токенами для упрощенной системы ссылок.

Пользователь Приложение Google / Сервер Ваш токен Конечная точка обмена Ваш API 1. Пользователь инициирует создание ссылки. 2. Запросить вход через Google. 3. Войдите через Google. 4. Проверка намерения (утверждение JWT) 5. account_found: true/false Если учетная запись найдена: 6. Получить намерение Если нет учетной записи: 6. Создайте намерение 7. access_token, refresh_token 8. Хранение пользовательских токенов 9. Доступ к пользовательским ресурсам
Рисунок 2. Последовательность событий в оптимизированном процессе связывания.

Роли и обязанности

В приведенной ниже таблице определены роли и обязанности участников процесса упрощенного связывания.

Актер / Компонент Роль GAL Обязанности
Приложение/сервер Google Клиент OAuth Получает согласие пользователя на вход через Google, передает подтверждения личности (JWT) на ваш сервер и надежно хранит полученные токены.
Ваша конечная точка обмена токенов Поставщик идентификационных данных / Сервер авторизации Проверяет подлинность учетных записей, проверяет наличие существующих учетных записей, обрабатывает необходимые намерения для привязки учетных записей ( check , get ) и необязательное намерение create , а также выдает токены на основе запрошенных намерений.
Ваш API сервиса Сервер ресурсов Предоставляет доступ к пользовательским данным при предъявлении действительного токена доступа.

Требования к упрощенной системе ссылок

  • Реализуйте базовый процесс привязки OAuth . Ваш сервис должен поддерживать конечные точки авторизации и обмена токенами , соответствующие стандарту OAuth 2.0.
  • Ваша конечная точка обмена токенами должна поддерживать утверждения JSON Web Token (JWT) и реализовывать необходимые намерения check и get , а также, при необходимости, намерение create .

Логика принятия решений для упрощения процесса связывания

Следующая логика определяет, как вызываются интенты в процессе упрощенной интеграции ссылок:

  1. Есть ли у пользователя учетная запись в вашей системе аутентификации? (Пользователь принимает решение, выбирая «ДА» или «НЕТ»)
    1. ДА: Использует ли пользователь адрес электронной почты, связанный с его учетной записью Google, для входа на вашу платформу? (Пользователь принимает решение, выбирая ДА или НЕТ)
      1. ДА: Есть ли у пользователя соответствующая учетная запись в вашей системе аутентификации? (для подтверждения вызывается намерение check )
        1. ДА: если запрос get intent успешно завершается, то вызывается метод getIntent, и учетная запись связывается.
        2. НЕТ: Создать новую учетную запись? (Пользователь принимает решение, выбирая ДА или НЕТ; применимо только в том случае, если ваш сервис поддерживает создание учетных записей)
          1. ДА: если функция создания create успешно завершается, вызывается метод createint, и учетная запись связывается.
          2. НЕТ: Запускается процесс авторизации OAuth, пользователь перенаправляется в свой браузер, и ему предоставляется возможность связаться с помощью другого адреса электронной почты.
      2. НЕТ: Запускается процесс авторизации OAuth , пользователь перенаправляется в свой браузер, и ему предоставляется возможность связаться с помощью другого адреса электронной почты.
    2. НЕТ: Есть ли у пользователя соответствующая учетная запись в вашей системе аутентификации? (для подтверждения вызывается намерение check )
      1. ДА: если запрос get intent успешно завершается, то вызывается метод getIntent, и учетная запись связывается.
      2. НЕТ: Если ваш сервис поддерживает создание учетных записей, вызывается интент create , и учетная запись связывается, если интент создания возвращается успешно. Если создание учетных записей не поддерживается, ваша конечная точка должна возвращать HTTP 401 linking_error для запуска резервного процесса связывания OAuth.

Рецепт реализации

Ваша конечная точка обмена токенов должна реализовывать необходимые намерения check и get данных, а также, при необходимости, намерение create данных для поддержки упрощенной привязки.

Выполните следующие шаги для обработки различных намерений:

Проверьте наличие существующей учетной записи пользователя (проверьте намерения).

Google обращается к вашей конечной точке обмена токенами, чтобы проверить, существует ли пользователь Google в вашей системе. Подробную информацию о параметрах см. в разделе «Упрощенные намерения связывания» .

Рецепт реализации

Для обработки требуемого запроса check выполните следующие действия:

  1. Подтвердите запрос :

    • Проверьте client_id , client_secret и grant_type (должен быть urn:ietf:params:oauth:grant-type:jwt-bearer ).
    • Проверьте assertion (JWT), используя критерии, описанные в разделе «Проверка JWT» .
  2. Найти пользователя :

    • Проверьте, совпадает ли идентификатор учетной записи Google ( sub ) или адрес электронной почты в JWT с именем пользователя в вашей базе данных.
  3. Отвечать :

    • Если найдено: вернуть HTTP 200 OK с {"account_found": "true"} .
    • Если не найдено: вернуть HTTP 404 Not Found с {"account_found": "false"} .

处理自动关联(获取 intent)

如果账号存在,Google 会使用 intent=get 调用您的端点以检索令牌。如需了解参数详情,请参阅简化的关联 intent

实现方案

如需处理所需的 get intent,请执行以下操作:

  1. 验证请求

    • 验证 client_idclient_secretgrant_type
    • 验证 assertion (JWT)。
  2. 查找用户

    • 使用 subemail 声明验证用户是否存在。
  3. 回应

    • 如果成功:在 JSON 响应 (HTTP 200 OK) 中生成并返回 access_tokenrefresh_tokenexpires_in
    • 如果关联失败:返回 HTTP 401 Unauthorized,其中包含 {"error": "linking_error"} 和可选的 login_hint,以便回退 到标准 OAuth 关联。

使用“使用 Google 账号登录”功能处理账号创建事宜(创建 intent)

如果您的服务支持账号创建,并且不存在任何账号,Google 会使用 intent=create 调用您的端点,以创建新用户。如需了解参数详情, 请参阅 简化的关联流程 intent

实现方案

如需处理可选的 create intent,请执行以下操作:

  1. 验证请求

    • 验证 client_idclient_secretgrant_type
    • 验证 assertion (JWT)。
  2. 验证用户不存在

    • 检查您的数据库中是否已存在 subemail
    • 如果用户存在,请返回 HTTP 401 Unauthorized,并使用 {"error": "linking_error", "login_hint": "USER_EMAIL"}强制 回退到 OAuth 关联流程。
  3. 创建账号

    • 使用 JWT 中的 subemailnamepicture 声明创建新的用户记录。
  4. 回应

    • 在 JSON 响应中生成并返回令牌 (HTTP 200 OK)。

Получите свой идентификатор клиента Google API.

В процессе регистрации привязки учетной записи вам потребуется указать свой идентификатор клиента Google API. Чтобы получить свой идентификатор клиента API, используя проект, созданный вами при выполнении шагов по привязке OAuth , выполните следующие действия:

  1. Перейдите на страницу «Клиенты» .
  2. Создайте или выберите проект Google API.

    Если для вашего проекта отсутствует идентификатор клиента (Client ID) для типа веб-приложения, нажмите «Создать клиент» (Create Client) , чтобы его создать. Обязательно укажите домен вашего сайта в поле «Разрешенные источники JavaScript» . При локальном тестировании или разработке необходимо добавить в поле « Разрешенные источники JavaScript» как http://localhost так и http://localhost:<port_number> .

Проверьте правильность вашей реализации.

Вы можете проверить свою реализацию, используя инструмент OAuth 2.0 Playground .

В инструменте выполните следующие действия:

  1. Нажмите конфигурации », чтобы открыть окно «Конфигурация OAuth 2.0».
  2. В поле «Процесс аутентификации OAuth» выберите «На стороне клиента» .
  3. В поле «Конечные точки OAuth» выберите «Пользовательские» .
  4. Укажите в соответствующих полях вашу конечную точку OAuth 2.0 и идентификатор клиента, который вы присвоили Google.
  5. В разделе «Шаг 1» не выбирайте никаких областей действия Google. Вместо этого оставьте это поле пустым или введите область действия, действительную для вашего сервера (или произвольную строку, если вы не используете области действия OAuth). После завершения нажмите «Авторизовать API» .
  6. В разделах «Шаг 2» и «Шаг 3» пройдите весь процесс аутентификации OAuth 2.0 и убедитесь, что каждый шаг работает должным образом.

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

В инструменте выполните следующие действия:

  1. Нажмите кнопку « Войти через Google» .
  2. Выберите учетную запись, которую хотите связать.
  3. Введите идентификатор службы.
  4. При желании укажите одну или несколько областей доступа, к которым вы запрашиваете доступ.
  5. Нажмите «Начать демонстрацию» .
  6. При появлении запроса подтвердите свое согласие и отклоните запрос на привязку.
  7. Убедитесь, что вас перенаправили на вашу платформу.