ym88659208ym87991671
Ошибка аутентификации в приложении партнера через OIDC страницу | Документация для разработчиков

Ошибка аутентификации в приложении партнера через OIDC страницу

Обновлено 17 апреля 2023

При реализации Аутентификация через OIDC страницу по документации для Android и IOS и используя SDK версии 2.0.0 и ниже, возможна ошибка завершения сценария.

Кейс

  1. Пользователь в мобильном приложении партнера нажимает войти по Сбер ID
  2. Открывается OIDC страница во встроенном в приложение браузере
  3. Пользователь выбирает вход через приложение СБОЛ
  4. В СБОЛе пользователь успешно подтвержает вход
  5. Пользователя перебрасывает во внешний браузер смартфона
  6. Аутентификация провалена

Причина

Сценарий входа через МП СБОЛ на OIDC странице начинается во встроенном в приложение браузере (Chrome Custom Tab или Safari View Controller), но после редиректа пользователя направляет во внешний браузер т.е. сценариций заканчивается в другом браузере или сценарий был запущен в браузере в режиме инкогнито.

Рекомендация

Вариант 1. Если используете SDK

После обновления Android SDK и IOS SDK до версии 2.2 и выше. Требуемые парметры authApp и app_redirect_uri будут передаваться автоматически, решив возникшую проблему.

Вариант 2. Если интегрированы по API

Перед запуском инициализации OIDC страницы необходимо проверить наличие мобильного приложения СБОЛ на устройстве или его отсутсвие

Android

// Проверка что МП СБОЛ не установлен на устройстве
fun checkSbolIsNotInstalled(context: Context): Boolean{
val deeplinkUri = Uri.Builder()
.scheme("sberbankidlogin")
.authority("sberbankid").build()

return context.packageManager
.queryIntentActivities(Intent( Intent.ACTION_VIEW, deeplinkUri), 0)
.isEmpty()
}

IOS

//Проверка что приложение сможет запустить диплинк и есть приложение которое сможет открыть этот диплинк.
private func isSBOLExists() -> Bool {
guard let sberbankOnlineDeeplink = URL(string: SdkConstants.sberbankOnlineOidcDeeplink),
let sbolDeeplink = URL(string: SdkConstants.sbolOidcDeeplink)
else {
return false
}

return urlOpenner.canOpenUrl(sbolDeeplink) || urlOpenner.canOpenUrl(sberbankOnlineDeeplink)
}


func canOpenUrl( _url:URL)-> Bool {
return UIApplication.shared.canOpenURL(url)
}

В результате проверки если МП СБОЛ установлено, то при запросе кода авторизации добавить передачу параметров authApp=sbol и app_redirect_uri={диплинк для возврата в ваше приложение после подтверждения в МП СБОЛ}

Если на устройстве нет МП СБОЛ, то в параметр authApp передать none

Вариант 3. Если нужно скрыть вход через МП СБОЛ

Если рекомендации выше вам не подходят, можно скрыть вход через МП СБОЛ на OIDC странице, для этого при запросе кода авторизации в параметр app передавать значение false

Пример

https://online.sberbank.ru/CSAFront/oidc/authorize.do?
response_type=code
&client_type=PRIVATE
&scope=openid name
&client_id=DA5278AC-A07F-C01A-B2D3-C231DBB2E20F
&state=af0ifjsldkj
&nonce=n-0S6_WzA2Mj
&redirect_uri=https%3A%2F%2Fclientresource.ru%2Fcb
&app=false
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.