Идентификация по идентификатору — OAuth 2.0

Для обеспечения бесперебойной работы пользовательских сессий (например, доступа к бонусам лояльности, персонализированным предложениям) и авторизованных платежей необходимо реализовать функцию привязки идентификаторов с использованием OAuth 2.0 . Если привязка идентификаторов не реализована, необходимо обеспечить поддержку гостевого взаимодействия .

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

Основные требования

Для связывания учетных записей пользователей используется протокол OAuth 2.0. Ваша реализация OAuth 2.0 должна соответствовать требованиям, изложенным в разделе «Связывание OAuth» .

Кроме того, в соответствии с передовыми методами обеспечения безопасности протокола Universal Commerce Protocol (UCP), мы настоятельно рекомендуем внедрить протокол Proof Key for Code Exchange (PKCE) с использованием S256 для всех обменов кодами авторизации и использовать асимметричную аутентификацию клиента (например, private_key_jwt или tls_client_auth ) в вашей точке доступа к токенам.

Подробнее читайте здесь: Общие руководящие принципы UCP .

Области применения

Необходимо реализовать следующие области действия, предоставляющие разрешения на все операции жизненного цикла оформления заказа (Создание, Обновление, Завершение) и на чтение данных заказа.

  • dev.ucp.shopping.order:read
  • dev.ucp.shopping.checkout:manage

Использование токенов

Когда пользователь связывает свою учетную запись, Google включает токен доступа пользователя в заголовок HTTP Authorization для всех операций жизненного цикла оформления заказа (создание, обновление, завершение) и запросов данных заказа:

Authorization: Bearer <access_token>

Это тот же заголовок, который используется для аутентификации между машинами.

Обработка ошибок

Если операция аутентификации пользователя завершается с ошибкой из-за проблем с идентификацией, необходимо вернуть заголовок WWW-Authenticate: Bearer challenge в соответствии с RFC 6750 вместе с соответствующим кодом состояния HTTP и сообщением об ошибке UCP.

Требуется идентификация

Эта ошибка возвращается, если для выполнения операции требуется идентификация пользователя, но в запросе отсутствует токен, или предоставленный токен недействителен или истек срок его действия.

  • Статус HTTP: 401 Unauthorized
  • Код ошибки UCP: identity_required
  • WWW-Authenticate: Include realm="<your-issuer-uri>" . If a token was present but invalid/expired, also include error="invalid_token" .

недостаточный_объем

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

  • Статус HTTP: 403 Forbidden
  • Код ошибки UCP: insufficient_scope
  • WWW-Authenticate: Include realm="<your-issuer-uri>" , error="insufficient_scope" , and scope="<space-separated list of required scopes>" .

Идентификация рекламодателя

Необходимо указать возможность связывания идентификаторов в вашем профиле UCP. Пример того, как указать эту возможность, см. в разделе «Профиль UCP» .

Google Streamlined Linking

Google Streamlined Linking — это необязательное дополнение к стандартному протоколу OAuth 2.0. Оно использует утверждения JWT для объединения проверок намерений и обмена токенами в конечной точке токена OAuth 2.0 ( check , create , get намерений).

Для обеспечения бесперебойной работы пользователей рекомендуется использовать функцию Google Streamlined Linking. Она позволяет пользователям связывать учетные записи или создавать новые учетные записи, используя свой профиль Google, не покидая интерфейс Google. Поскольку весь процесс происходит внутри пользовательского интерфейса Google, отдельный интерфейс для связывания не требуется. Это снижает затраты на разработку, исключает перенаправления в браузере и может повысить коэффициент конверсии.

Метаданные сервера авторизации (пример в формате JSON)

Необходимо опубликовать метаданные вашего сервера авторизации по следующему адресу:

GET https://YOUR_DOMAIN/.well-known/oauth-authorization-server

Ниже приведён пример того, как это может выглядеть:

{
  "issuer": "https://merchant.example.com",
  "authorization_endpoint": "https://merchant.example.com/oauth2/authorize",
  "token_endpoint": "https://merchant.example.com/oauth2/token",
  "revocation_endpoint": "https://merchant.example.com/oauth2/revoke",
  "scopes_supported": [
    "dev.ucp.shopping.order:read",
    "dev.ucp.shopping.checkout:manage"
  ],
  "response_types_supported": [
    "code"
  ],
  "grant_types_supported": [
    "authorization_code",
    "refresh_token"
  ],
  "token_endpoint_auth_methods_supported": [
    "client_secret_basic"
  ],
  "service_documentation": "https://merchant.example.com/docs/oauth2"
}