ym88659208ym87991671
Использование GET-параметров redirect_uri | Документация для разработчиков

Использование GET-параметров redirect_uri

Обновлено 29 октября 2024

Для подсчета конверсии сценария, эффективности рекламной кампании и замера других бизнес-метрик Партнеру нужно уметь прослеживать весь путь пользователя на ресурсе партнера, аутентификации по Сбер ID и действия партнера на ресурсе после авторизации.

Для этого Сбер ID предоставляет возможность использования любых значений Партнера в GET- параметрах redirect_uri. В качестве GET-параметров могут использоваться utm-метки и другие разрешенные значения.

Это позволит не регистрировать каждый раз в Сбер ID новый redirect_uri с get-параметрами.

При запуске входа по Сбер ID (любым сценарием) партнер должен:

  • Передавать все необходимые GET-параметры вместе со значением параметра redirect_uri.
  • Распознавать эти GET-параметры после успешного входа (они приходят вместе с параметрами state и code).
  • В Сбер ID redirect_uri должен быть зарегистрирован без GET-параметров.
  • В бэковом запросе токена /token.do redirect_uri следует отправлять также без GET-параметров (он должен совпадать со значением, зарегистрированным в Сбер ID).

Как это работает?

В запросе аутентификации в качестве GET-параметров в redirect_uri можно использовать следующие параметры:

  • utm_source
  • utm_medium
  • utm_campaign
  • utm_term
  • utm_content
  • utm_nooverride
  • utm_referrer
  • option1
  • option2
  • option3

Ограничения

Чтобы функция работала корректно, необходимо соблюдать следующие правила:

  • Используем только 10 указанных GET-параметров.
  • Длина значения каждого параметра не должна превышать 50 символов.
  • Запрещенные символы: <, >, =, &, #, +, %, ^, |, \, {, }, ' ' (пробел).
  • В redirect_uri не должно быть дублирующих GET-параметров.
  • Значение redirect_uri вместе с метками должно кодироваться в формате UTF-8.

Помимо целевого способа есть и обходные варианты учета get-параметров Партнером:

Партнер должен уметь сохранять свои get-параметры перед стартом входа по Сбер ID, а потом восстанавливать их после окончания аутентификации по Сбер ID

Как это делать?

  1. МП СБОЛ открывает ссылку партнера вида: https://partner.ru/sberIdAuth&to=/GD23&utm_source=sbolapp_gd23&sberIDRedirect=sberbankidlogin://sberbankidsso. Значения параметров нужно кодировать.
  2. Если в ссылке были GET-параметры (в т.ч. utm-метки), партнер сохраняет это значение в связке со state.
  3. Партнер запускает вход по Сбер ID.
  4. Сбер ID выполняет аутентификацию и возвращает параметры state и code.
  5. Партнер восстанавливает значения GET-параметров по state и отправляет их в свои системы аналитики, добавляя в ссылку при редиректе на целевую страницу.
  6. Пользователь успешно аутентифицирован на сайте партнера.

Параметр sberIDRedirect подставит МП СБОЛ, самостоятельно его добавлять не нужно

Пример запроса на вход по Сбер ID в вебе:


https://id.sber.ru/CSAFront/oidc/sberbank_id/authorize.do?
client_type=PRIVATE
&scope=openid
&state=Otj4txeatMX9VzxwH4MYQq2reQvAKFMn6PH2sQXYAXo
&response_type=code
&client_id=7F7A56C3-CEE5-4BB4-5BF5-D11D678F236B
&redirect_uri=https%3A%2F%2Fwww.samovar.ru%3Futm_source%3DQwerty_478Qwerty_478Qwerty_478Qwerty_478Qwerty_4789%26utm_medium%3DAsdfgh_123%26utm_campaign%3DZxcvbn_789
&nonce=gyYEcMPLoyxLYOShN-0QnWdZUHq8mswakuet4YmUGCo

Пример ответа в результате успешного входа в вебе:


https://www.samovar.ru?
state=Otj4txeatMX9VzxwH4MYQq2reQvAKFMn6PH2sQXYAXo
&code=12asdsad34123asdw12341234
&utm_source=Qwerty_478Qwerty_478Qwerty_478Qwerty_478Qwerty_4789
&utm_medium=Asdfgh_123
&utm_campaign=Zxcvbn_789

Пример настройки запроса кода авторизации при вызове МП СБОЛ (SDK Android):


// Создание параметров для поддержки протокола PKCE.
val codeVerifier = PkceUtils.generateRandomCodeVerifier(SecureRandom())
val codeChallenge = PkceUtils.deriveCodeVerifierChallenge(codeVerifier)

// Создание Uri с параметрами для аутентификации
val uri = SID.Login.createUriForLogin(
"05c3d35e-e6cd-47fb-9b5c-48463c146478",
"openid",
"ffad1d59c1e34844a3499966103d44f3",
"b1947d4f10a24eb0a6bb62679be9b066",
"redirect_uri=https%3A%2F%2Fwww.samovar.ru%3Foption1%3DQwerty_478Qwerty_478Qwerty_478Qwerty_478Qwerty_4789%26utm_medium%3DAsdfgh_123%26utm_campaign%3DZxcvbn_78",
codeChallenge,
PkceUtils.getCodeChallengeMethod()
)
SID.Login.loginWithID(this, uri)

Пример настройки запроса кода авторизации при вызове МП СБОЛ (SDK iOS):


// Параметры для поддержки PKCE
let verifier = SIDUtils.createVerifier()
let challenge = SIDUtils.createChallenge(verifier)

let request = SIDAuthRequest()
request.nonce = "your nonce"
request.scope = "your scope"
request.state = "your state"
request.redirectUri = "redirect_uri=https%3A%2F%2Fwww.samovar.ru%3Foption1%3DQwerty_478Qwerty_478Qwerty_478Qwerty_478Qwerty_4789%26utm_medium%3DAsdfgh_123%26utm_campaign%3DZxcvbn_78"
request.codeChallenge = challenge
request.codeChallengeMethod = SIDAuthRequest.challengeMethod
request.loginHint = "79998887766"

SID.login.auth(withSberId: request, viewController: viewController)

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.