ym88659208ym87991671
Запуск авторизации по Сбер ID | Документация для разработчиков

Запуск авторизации по Сбер ID

Обновлено 28 августа 2023

При возникновении вопросов рекомендуем заглянуть в наш раздел FAQ по сценарию OIDC to App

Запуск авторизации

Для успешного запроса авторизации создайте и заполните объект SIDAuthRequest соответствующими параметрами.

Метод auth создает уникальную ссылку для авторизации и открывает мобильное приложение Сбербанк Онлайн (если установлено) либо веб-окно. Для авторизации через метод soleLoginWebPageAuth перейдите в раздел Авторизация через единый web-портал авторизации по Сбер ID.

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

let request = SIDAuthRequest()
request.nonce = "your nonce"
// Перечисление scope через пробел
request.scope = "your scope"
request.state = "your state"
request.redirectUri = "myapp://sberidauth"
// Необязательный параметр
request.codeChallenge = challenge
// Необязательный параметр
request.codeChallengeMethod = SIDAuthRequest.challengeMethod
// Необязательный параметр для передачи номера телефона пользователя, добавлен в версии 2.4.2
request.loginHint = "79998887766"

// Запуск авторизации
let loginViewController = UIViewController()

/*
* Авторизоваться с помощью Сбербанк Онлайн,
* если Сбербанк онлайн не установлен открывается
* веб окно авторизации.
*/
SIDManager.auth(withSberId: request, loginViewController)


Полный перечень параметров scope доступен в разделе Перечень допустимых параметров Scope

В версиях до 1.3.1 открывается внешний браузер Safari - на данный момент это запрещено Apple.

В версиях до 2.0.0, если вы использовали устаревшие методы запуска авторизации без viewController, нужно установить свойство SIDManager.navigationController, чтобы открылся SafariViewController, когда приложение Сбербанк Онлайн не может быть запущено (UIApplication.shared.canOpenURL для Сбербанк Онлайн возвращает false)

Обработка ответа после авторизации

После авторизации Сбербанк Онлайн перенаправит вас обратно в ваше приложение по адресу, указанному в параметре redirectUri объекта SIDAuthRequest. Зарегистрируйте deeplink (адрес) приложения, чтобы открыть его при переходе.

Откройте параметры проекта и перейдите во вкладку Info. В нижней части добавьте свой URL Type.

Скриншот обработки ответа

Далее в файле AppDelegate прописываем свою логику (см. пример ниже), метод application вызывается при открытии вашего приложения по deeplink(ссылке). SIDManager.getResponseFrom(_ url: URL, completion: (SIDAuthResponse) -> Void) вернет вам объект SIDAuthResponse с полученными параметрами.

func application(_ app: UIApplication, 
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if url.scheme == "myapp" && url.host == "sberidauth" {
SIDManager.getResponseFrom(url) { response in
//do something
}
}
return true
}

Модель ответа:

class SIDAuthResponse : NSObject {

/// Значение, сгенерированное внешней АС для предотвращения атак повторения
var nonce: String { get }

/// Значение для предотвращения подделки межсайтовых запросов, случайно сгенерированное
var state: String? { get }

/// Код авторизации клиента
var authCode: String? { get }

/// Текст ошибки
var error: String? { get }

/// Статус операции
var isSuccess: Bool { get }
}

Поддержка бесшовной авторизации

Для стандартной (не бесшовной) авторизации по Сбер ID с кнопкой, выполнять указанные в этом пункте действия не нужно.

Начиная с версии SDK 1.4.0 реализована поддержка бесшовной авторизации по Сбер ID. Бесшовная авторизация возможна при переходе из приложений СберБанка в ваше приложение и позволяет запустить авторизацию без показа кнопки и без нажатия на нее пользователем.

В диплинке, который придет в ваше приложение, будет дополнительный параметр - базовый url. Чтобы получить значение этого параметра, необходимо воспользоваться методом getSSOUrlStringFrom(_ url: URL?) класса SIDUtils, передав в него пришедший диплинк. Полученное значение необходимо передать в свойство ssoBaseUrl при построении объекта SIDAuthRequest.

// Получение параметра ssoBaseUrl
let ssoBaseUrl = SIDUtils.getSSOUrlStringFrom(receivedUrl)

/// Присваивание параметра ssoBaseUrl свойству объекта SIDAuthRequest
let request = SIDAuthRequest(scope: "scope",
state: "state",
nonce: "nonce",
ssoBaseUrl: ssoBaseUrl,
redirectUri: "https://testRedirect.url",
codeChallenge: "challenge",
codeChallengeMethod: SIDAuthRequest.challengeMethod)

/// ИЛИ:
let request = SIDAuthRequest()
/// заполнение запроса параметрами
request.ssoBaseUrl = ssoBaseUrl

/// Запуск авторизации
SIDManager.auth(withSberId: request)

Все остальные действия по подготовке диплинка и запуску авторизации аналогичны описанным в разделе Запуск процесса авторизации по Сбер ID.

Авторизация через единый web-портал авторизации по Сбер ID (OIDC)

В версии SDK 1.4.0 был добавлен новый метод для авторизации пользователя по Сбер ID. Он использует единое веб-окно авторизации, которое открывается в вашем приложении через SafariViewController. Кэширование веб окна ускоряет процесс авторизации при последующих запросах.

Для этого:

  1. Отправьте список диплинков на почту, чтобы сделать их доверенными. В письме нужно указать client_id и список диплинков, которые используются для возврата в ваше мобильное приложение..
  2. Создайте запрос SIDAuthRequest, как при обычном входе.
  3. Запустите OIDC авторизацию через метод soleLoginWebPageAuth с дополнительным параметром svcRedirectUrlString. Если запуск сценария невозможен, вернется false.
// Запуск авторизации
let loginViewController = UIViewController()
SIDManager.soleLoginWebPageAuth(sberIdRequest: request,
svcRedirectUrlString: "Ваш диплинк",
viewController: loginViewController) // Авторизация с помощью веб окна.

Откроется единое веб-окно авторизации в SafariViewController с различными способами идентификации входа по Сбер ID:

Скриншот кнопки 1

Новый параметр svcRedirectUrlString используется для передачи «активности» в ваше приложение из SafariViewController. После прохождения авторизации на портале и возврата в ваше приложение(по диплинку из svcRedirectUrlString) процесс авторизации продолжит работу по стандартному сценарию OIDC. В ваше приложение вернется AuthCode и другие параметры через диплинк, переданный в SIDAuthRequest().redirectUri. Вам необходимо закрыть SafariViewController самостоятельно. Дальнейшие шаги процесса авторизации описаны в разделе Запуск процесса авторизации по Сбер ID.

Перечень допустимых параметров Scope

Для получения данных пользователя необходимо на этапе инициализации SIDAuthRequest передать перечень необходимых данных в параметре scope. Ниже в таблице представлен список всех доступных scope для Сбер ID:

ScopeНаименование параметра в ответеОписаниеПример ответа
namefamily_name, given_name, middle_nameФамилия, Имя, Отчество

"family_name":"Фамилия"

"given_name":"Имя"

"middle_name":"Отчество"

birthdatebirthdateДата рождения (формат ГГГГ-ММ-ДД) "birthdate":"0000-00-00"
maindocidentificationПолные данные паспорта:

"identification":{

"series":"00 00",

"number":"000000",

"issued_by":"Орган выдавший документ",

"issued_date":"0000-00-00",

"code":"000-000"

}

inninnИНН номер

"inn":{

"number":"0000000"

}

snilssnilsСНИЛС номер

"snils":{

"number":"0000000"

}

mobilephone_numberНомер телефона"phone_number":"+7 (000) 000000”
emailemailАдрес электронной почты"email":“personal@mail.ru
gendergenderПол: 1 – мужчина; 2 – женщина;"gender":1,
driving_licensedriving_licenseНомер водительского удостоверения

"driving_license":{

"number":"111111"

}

international_passportinternational_passportЗаграничный паспорт гражданина РФ:

"international_passport":{

"series":"777",

"number":"333",

"issued_by":"рога и копыта",

"issued_date":"1981-01-01",

"planned_end_date":"1999-02-01",

"name":"name",

"surname":"surname"

}

priority_docpriority_docДанные документа, удостоверяющего личность:

"priority_doc":{

"type":17,

"series":"777",

"number":"333",

"issued_by":"рога и копыта",

"issued_date":"1981-01-01",

"code":"adasd"

}

citizenshipcitizenshipГражданство:

"citizenship":{

"country_code":"countryCode",

"country_name":"countryName"

}

place_of_birthplace_of_birthМесто рождения"place_of_birth":”Nsk”
address_regaddress_regАдрес регистрации

"address_reg":{

"full_address":"fullAddress",

"fias_code":"fiasCode",

"post_index":"postIndex",

"country":"country",

"region":"region",

"district":"district",

"city":"city",

"settlement":"settlement",

"street":"street",

"house":"house",

"building":"building",

"bulk":"bulk",

"apartment":"apartment"

}

work_addresswork_addressРабочий адрес

"work_address":{

"full_address":"fullAddress",

"fias_code":"fiasCode",

"post_index":"postIndex",

"country":"country",

"region":"region",

"district":"district",

"city":"city",

"settlement":"settlement",

"street":"street",

"house":"house",

"building":"building",

"bulk":"bulk",

"apartment":"apartment"

}

address_of_actual_residenceaddress_of_actual_residenceАдрес места жительства/доставки

"address_of_actual_residence":{

"full_address":"fullAddress",

"fias_code":"fiasCode",

"post_index":"postIndex",

"country":"country",

"region":"region",

"district":"district",

"city":"city",

"settlement":"settlement",

"street":"street",

"house":"house",

"building":"building",

"bulk":"bulk",

"apartment":"apartment"

}

delivery_addressdelivery_addressАдрес для доставки

"delivery_address":{

"full_address":"fullAddress",

"fias_code":"fiasCode",

"post_index":"postIndex",

"country":"country",

"region":"region",

"district":"district",

"city":"city",

"settlement":"settlement",

"street":"street",

"house":"house",

"building":"building",

"bulk":"bulk",

"apartment":"apartment"

}

verifiedverifiedПризнак верифицированности пользователя"verified":true,
is_company_employeeis_company_employee Признак сотрудника ПАО "Сбербанк""is_company_employee":true,
stsstsНомер СТС

"sts":{

"number":"00 00 00000"

}

is_self_employedis_self_employedПризнак самозанятого"is_self_employed":true
previous_maindocprevious_identificationРеквизиты ранее выданного паспорта гражданина РФ:

"previous_identification":{

"series":"00 00",

"number":"000 000",

"issued_by":"Орган выдавший документ",

"issued_date":"0000-00-00"

}

previous_nameprevious_family_name,previous_given_name,previous_middle_nameПредыдущая фамилия, имя, отчество

"previous_family_name":"Фамилия"

"previous_given_name":"Имя"

"previous_middle_name":"Отчество"

educationeducationСведения об образовании:

"education":{

"code":"1",

"description":"начальное"

}

place_of_workplace_of_workНаименование организации(место работы)"place_of_work": "место работы",
job_titlejob_titleНаименование должности"job_title": "должность"
marital_statusmarital_statusСемейное положение:

"marital_status":{

"code":"1",

"description":"холост"

}

propositionpropositionСведения для формирования рекламных предложений (признак VIP-клиента)"proposition": true
salary_statussalary_statusПризнак зарплатного клиента"salary_status": true
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.