Использование GET-параметров redirect_uri
Для подсчета конверсии сценария, эффективности рекламной кампании и замера других бизнес-метрик Партнеру нужно уметь прослеживать весь путь пользователя на ресурсе партнера, аутентификации по Сбер 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
Как это делать?
- МП СБОЛ открывает ссылку партнера вида:
https://partner.ru/sberIdAuth&to=/GD23&utm_source=sbolapp_gd23&sberIDRedirect=sberbankidlogin://sberbankidsso
. Значения параметров нужно кодировать. - Если в ссылке были GET-параметры (в т.ч. utm-метки), партнер сохраняет это значение в связке со state.
- Партнер запускает вход по Сбер ID.
- Сбер ID выполняет аутентификацию и возвращает параметры state и code.
- Партнер восстанавливает значения GET-параметров по state и отправляет их в свои системы аналитики, добавляя в ссылку при редиректе на целевую страницу.
- Пользователь успешно аутентифицирован на сайте партнера.
Параметр 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)