Авторизация через мобильное приложение Сбербанк Онлайн
Для корректной работы необходимо инициализировать SDK SDK до вызова методов авторизации
Описание сценария и метода loginWithID
Для входа через мобильное приложение Сбербанк Онлайн используется метод
SID.Login.loginWithID(activity: FragmentActivity, uri: Uri)
Описание параметров
FragmentActivity используется для запуска приложения Сбербанк Онлайн или веб Страницы
Uri для передачи всех данных, необходимых для аутентификации, таких как clientId, scope, state, nonce, redirectUri, codeChallenge и codeChallengeMethod.
Метод loginWithID следует вызывать исключительно в главном потоке. Это необходимо для проверки доступности WebView и для отображения сообщения Toast в случае, если WebView недоступен.
Этот метод выполняет следующие действия:
Проверка наличия мобильного приложения Сбербанк Онлайн. Метод проверяет, установлено ли на устройстве пользователя мобильное приложение Сбербанк Онлайн. Если приложение установлено, метод запускает его для выполнения процесса входа.
Запуск веб-страницы Сбер ID. Если мобильное приложение Сбербанк Онлайн не установлено на устройстве пользователя, метод запускает веб-страницу Сбер ID для выполнения процесса входа.
Таким образом, этот метод обеспечивает гибкий способ входа, позволяя пользователям использовать как мобильное приложение, так и веб-страницу Сбер ID в зависимости от наличия приложения на их устройстве.
dependencies {
implementation "androidx.browser:browser:1.4.0"
}
Указанная версия актуальна на момент публикации, но вы можете использовать более новую версию, если она доступна.
Формирование ссылки и запуск сценария
Для формирования uri используйте:
- Метод
SID.Login.createUriForLoginпозволяет создатьuriдля авторизации по Сбер ID. - Класс
PkceUtilsсодержит утилиты для создания значений параметров протокола PKCE (необязательные параметры, если вы не используете PKCE).
Обратите внимание, что clientID передается через настройки SDK
Пример реализации
//Создание параметров для поддержки протокола PKCE.
val codeVerifier = PkceUtils.generateRandomCodeVerifier(SecureRandom())
val codeChallenge = PkceUtils.deriveCodeVerifierChallenge(codeVerifier)
//Создание Uri с параметрами для аутентификации, все значения нужно поменять на свои, тут указаны примеры
val uri = SID.Login.createUriForLogin(
scope = "добавьте все необходимые вам scope",
state = "random_state",
nonce = "random_nonce",
redirectUri = "partner://redirect",
codeChallenge = codeChallenge,
codeChallengeMethod = PkceUtils.getCodeChallengeMethod()
)
//Запуск аутентификации по Сбер ID, первым параметром нужно передать контекст
SID.Login.loginWithID(this, uri)
Прочитать про общую схему входа, а так же параметры можно на страницу подключение Сбер ID
redirectUri должен быть добавлен для вашего сервиса в привязке к clientId.
Для этого направьте запрос на support@ecom.sberbank.ru на добавление deeplink в список доверенных. В запросе указывается clientId и список deeplink, по которым будет производиться возврат в мобильное приложение партнера. Сотрудник банка добавит домен в список разрешенных.
Если все сделано верно, запустится мобильное приложение Сбербанк Онлайн или веб окно с различными способами идентификации входа по Сбер ID.
После авторизации в мобильном приложение Сбербанк Онлайн пользователя, по redirectUri произойдет редирект на нужный экран вашего приложения.
Про обработку результата читайте в статье Обработка ответа после авторизации
Перечень допустимых параметров Scope
Параметры scope позволяют указать, к каким данным пользователя вы хотите получить доступ в процессе авторизации. Это важно для соблюдения принципов минимальной необходимости и прозрачности обработки персональных данных. Ниже в таблице представлен список всех доступных scope для Сбер ID:
| Scope | Наименование поля в ответе | Описание | Пример |
|---|---|---|---|
| Пакет Light | |||
| openid (обязательно) | sub | Неизменный уникальный идентификатор клиента, передаваемый внешним потребителям. | "sub":"e327493e-979a-461f-9ca5-edfab9d6fbab" |
email | Адрес электронной почты | "email":“personal@mail.ru” | |
| mobile | phone_number | Номер телефона | "phone_number":"+7 (000) 000000” |
| Пакет Standart | |||
| birthdate | birthdate | Дата рождения (формат ГГГГ-ММ-ДД) | "birthdate":"0000-00-00" |
| name | family_name, given_name, middle_name | Фамилия Имя Отчество | "family_name":"Фамилия" "given_name":"Имя" "middle_name":"Отчество" |
| gender | gender | Пол: 1 – мужчина; 2 – женщина; | "gender":1, |
| Пакет Professional | |||
| maindoc | identification | Полные данные паспорта: серия,номер,орган, выдавший паспорт,дата выдачи паспорта (ф ормат ГГГГ-ММ-ДД),код подразделения | "identification":{ "series":"00 00", "number":"000000", "issued_by":"Орган выдавший документ", "issued_date":"0000-00-00", "code":"000-000" } |
| inn | inn | ИНН номер | "inn":{ "number":"0000000" } |
| snils | snils | СНИЛС номер | "snils":{ "number":"0000000" } |
| driving_license | driving_license | Номер водительского удостоверения | "driving_license":{ "number":"111111" } |
| international_passport | international_passport | Заграничный паспорт гражданина РФ:серия документа (формат 00 00),номер документа(формат 000000),кем выдан, дата выдачи (формат ГГГГ-ММ-ДД),дата окончания (формат ГГГГ-ММ-ДД),имя,фамилия | "international_passport":{ "series":"777", "number":"333", "issued_by":" |