Бесшовный переход из ЕЛК на сервисы Сбера
Sber ID SDK позволяет обеспечить бесшовный переход пользователей между вашим мобильным приложением и сайтом партнера. Пользователи могут легко переключаться между сервисами, сохраняя статус аутентификации с помощью AppToken.
Обзор механизма
AppToken — это долгоживущий токен (до 3 месяцев), который позволяет пользователям сохранять статус аутентификации при переходе между приложением и веб-сайтом. По умолчанию токен автоматически обновляется ежедневно.
Получение AppToken
Для получения AppToken необходимо добавить scope mapp_sso в параметры авторизации.
val uri = SIDLogin.createLoginUri(
scope = "openid mapp_sso ...", // добавьте mapp_sso и другие необходимые scope
state = generateRandomString(),
nonce = generateRandomString(),
redirectUri = "partner://redirect",
codeChallenge = codeChallenge,
codeChallengeMethod = PkceUtils.getCodeChallengeMethod(),
uriScheme = "partner://deeplink"
)
После успешной авторизации необходимо обработать результат для сохранения токена:
val result = SIDLogin.getIDAuthResult(data ?: return)
// Токен автоматически сохраняется в защищенном хранилище
Без вызова SIDLogin.getIDAuthResult() AppToken не сохранится в системе.
Проверка валидности AppToken
Проверку валидности AppToken рекомендуется выполнять при каждом запуске приложения, после инициализировать и настроить SDK. Для проверки исп ользуйте метод используйте метод SID.AppToken.checkAppTokenForValid(), результат можно получить подписавшись на события AppTokenEvents
// Подписка на события AppToken
SID.Events.subscribeForAppTokenEvents(owner = this) { tokenEvent ->
when (tokenEvent) {
is AppTokenEvents.IsValid -> {
// Токен валиден, можно выполнять операции с SSO
}
is AppTokenEvents.HasExpire -> {
// Токен истек. Нужно обновить."
}
}
}
// Запуск проверки токена
SID.AppToken.checkAppTokenForValid()
Обновление AppToken
При необходимости обновления токена используйте метод updateAppToken():
private fun updateAppToken() {
val codeVerifier = PkceUtils.generateRandomCodeVerifier(SecureRandom())
val codeChallenge = PkceUtils.deriveCodeVerifierChallenge(codeVerifier)
val oidcParams = OIDCParams(
clientId = "ваш_client_id",
scope = "openid mapp_sso phones", // необходимые scope
redirectUri = "partner://redirect",
state = "state",
nonce = "nonce",
codeChallenge = codeChallenge,
codeChallengeMethod = PkceUtils.getCodeChallengeMethod()
)
SID.AppToken.updateAppToken(oidcParams)
}
Переход на сайт партнера
При стандартной реализации SDK сам реализует бесшовный переход, но могут возникнуть потребность в ручном вызове. Для бесшовного перехода на сайт партнера используйте метод goToPartnerSSO():
// Создаем информацию о ссылке
val linkInfo = LinkInformation(
webLink = "https://partner.example.com/secure-section",
clientId = "partner_client_id",
partnerColorInt = Color.parseColor("#4CAF50"), // Зеленый цвет для UI элементов
openIn = "webview" // Или "browser" для открытия в браузере
)
// Открываем партнерский сайт с авторизованной сессией
SID.AppToken.goToPartnerSSO(
currentActivity = this,
linkInformation = linkInfo
)
Удаление AppToken
При выходе пользователя из приложения вызовите SIDLogin.logout() :
// Удаление сессии и AppToken
SIDLogin.logout()
}