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

Процесс авторизации

Обновлено 10 октября 2025

Авторизация пользователей через Сбер ID в вашем приложении включает несколько ключевых шагов, начиная с подготовки запроса и заканчивая обработкой полученного ответа.

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

1. Подготовка запроса на авторизацию

Для начала процесса авторизации необходимо создать объект SIDAuthRequest, который будет содержать все необходимые параметры для выполнения авторизации.

let verifier = SIDUtils.createVerifier()
let challenge = SIDUtils.createChallenge(verifier)
let challengeMethod = SIDAuthRequest.challengeMethod

/// Инициализатор
/// - Parameters:
/// - scope: Наименование групп данных, на которые подписана система
/// - state: Значение для предотвращения подделки межсайтовых запросов, случайно сгенерированное
/// - nonce: Значение, сгенерированное внешней АС для предотвращения атак повторения
/// - ssoBaseUrl: URI, который будет использован для запуска авторизации взамен дефолтного (бесшовная авторизация)
/// - redirectUri: Url на который будет перенаправлен клиент после успешной аутентификации (deeplink)
/// - codeChallenge: Хэшированное значение секретного кода
/// - codeChallengeMethod: Метод преобразования секретного кода
/// - standType: Тип стэнда к которому будет выполняться подключение
/// - loginHint: Номер телефона пользователя "79ХХХХХХХХХ"
let request = SIDAuthRequest(scope: "openid profile email",
state: "random_state",
nonce: "random_nonce",
redirectUri: "myapp://callback",
ssoBaseUrl: nil,
codeChallenge: challenge,
codeChallengeMethod: challengeMethod,
loginHint: "79012345678")

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

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

После подготовки объекта SIDAuthRequest, используйте его для запуска авторизации. Вы можете выбрать один из двух доступных методов: стандартную авторизацию через Сбербанк Онлайн или через единый web-портал авторизации (OIDC).

Стандартная авторизация через Сбербанк Онлайн:

Метод откроет приложение Сбербанка для авторизации, если приложение на устройстве отсутствует, откроется единое web-окно авторизации.

/// Приоритетная авторизоваться с помощью мобильного приложения банка
/// - Parameters:
/// - request: модель запроса
/// - viewController: viewController для открытия SVC для авторизации через Web при отсутсвии приложения банка
SID.login.auth(withSberId: request, viewController: viewController)

Авторизация напрямую (без UI) через Сбербанк Онлайн

Используйте для фоновой инициализации авторизации(пользователь не нажимает на кнопку авторизации) через приложение Сбербанка. Передайте замыкание, для обработки случая, когда приложение Сбербанка отсутствует на устройстве.

/// Авторизация напрямую (без UI) с помощью мобильного приложения банка
/// - Parameters:
/// - request: модель запроса
/// - completion: Обработчик результата открытия приложения банка
SID.login.autoAuth(request: request) { success in
if success {
print("Аутентификация успешна")
// Выполнить действия после успешной аутентификации
} else {
print("Ошибка аутентификации")
// Обработать ошибку аутентификации
}
}

Запуск авторизации через единый web-портал (OIDC):

Использование единого web-портала авторизации по Сбер ID (OIDC) через встроенное веб-окно в приложении позволяет пользователям проходить авторизацию без необходимости покидать ваше приложение. Благодаря кэшированию веб-окна и использованию SafariViewController, время, необходимое для авторизации, сокращается, так как повторные авторизации выполняются еще быстрее.

Используйте метод webAuth для авторизации через единый web-портал, который обеспечивает унифицированный пользовательский опыт на различных платформах.

class YourViewController: UIViewController, SIDSafariViewControllerDelegate {

/// SafariViewController для отслеживания состояния из делегата SIDSafariViewControllerDelegate
var safariViewController: SFSafariViewController?

func startSberIDAuthorization() {
let request = SIDAuthRequest(/* Настройка запроса */)

/// Приоритетная авторизация с помощью единого веб окна.
/// - Parameters:
/// - request: модель запроса
/// - svcRedirectUrlString: URL для возврата из приложения банка в МП партнера на
/// открытый SVC со страницей единого портала авторизации
/// - viewController: viewController необходимый для открытия SafariViewController
/// - Returns: статус успеха запуска авторизации
let success = SID.login.webAuth(
sberIdRequest: request,
svcRedirectUrlString: "Ваш диплинк",
viewController: self
)
if success {
// Авторизация была успешно инициирована
} else {
// Обработка ошибки инициации авторизации
}
}
}

Подписка на протокол SIDSafariViewControllerDelegate не является обязательной, но может предоставить дополнительные возможности для контроля над процессом авторизации:

  • Обработка закрытия веб-окна: Позволяет отслеживать момент закрытия SafariViewController пользователем. Это может быть полезно для реализации дополнительной логики в вашем приложении, например, для возвращения пользователя на определенный экран или отображения сообщения после попытки авторизации.
  • Возврат на предыдущий экран: Если в вашем приложении предусмотрена последовательность экранов или определенный путь пользователя, подписка на делегата позволит вам точно контролировать возвращение пользователя на экран, с которого была инициирована авторизация, поддерживая непрерывность пользовательского опыта.

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

Использование авторизации через WebView позволяет нативно авторизовать пользователя без необходимости покидать приложение или переключаться на браузер.

Применяйте метод loginWithIDToWebView если хотите дать пользователю user friendly experience во время авторизации. В случае если на каком-то этапе произойдет ошибка или пользователь сам закроет экран - web окно закроется и на делегат SIDWebViewDelegateProtocol отправится событие webViewReject.

class YourViewController: UIViewController, SIDWebViewDelegateProtocol {

func startSberIDAuthorization() {
let request = SIDAuthRequest(/* Настройка запроса */)

/// Авторизация через WebView
/// - Parameters:
/// - request: модель запроса
/// - viewController: viewController необходимый для открытия окна доавторизации
/// - delegate: Обработчик событий для webView
SID.login.loginWithIDToWebView(request: request, viewController: self, delegate: self)
}

func webViewReject() {
// Обработка закрытия webView
}
}

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

После успешной авторизации пользователь будет перенаправлен обратно в ваше приложение. Вам необходимо обработать ответ, используя URL, на который произошло перенаправление, и извлечь из него данные авторизации.

func application(_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
SID.login.getResponseFrom(url) { response in
if response.isSuccess {
// Обработка успешной авторизации
} else {
// Обработка ошибки авторизации
}
}
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 }

/// AppToken для бесшовной авторизации
var appToken: String? { get }
}

Бесшовная авторизация

Автоматическая авторизация пользователей, приходящих из приложения Сбербанка, без необходимости нажимать на кнопку "Войти по Сбер ID". Этот процесс называется бесшовной авторизацией.

Как это работает:

  1. Получение специальной ссылки: Когда пользователь переходит из приложения Сбербанка в ваше приложение, система отправляет вам специальную ссылку (диплинк), которая содержит sberIDRedirect для авторизации.

  2. Извлечение базового URL из ссылки: Чтобы начать процесс авторизации, вам нужно извлечь из этой ссылки специальный параметр — базовый URL (ssoBaseUrl).

    let ssoBaseUrl = SIDUtils.getSSOUrlStringFrom(receivedUrl)
  1. Использование базового URL: Далее, вам нужно передать этот базовый URL в объект SIDAuthRequest, который используется для настройки запроса на авторизацию.
    let request = SIDAuthRequest()
request.scope = "openid profile email"
request.state = "unique_state_value"
request.nonce = "unique_nonce_value"
request.ssoBaseUrl = ssoBaseUrl
request.redirectUri = "yourAppScheme://callback"
request.codeChallenge = "generated_code_challenge"
  1. Запуск авторизации: С этими настройками вы готовы запустить процесс авторизации, вызвав соответствующий метод SDK Сбер ID.

Этот процесс позволяет вашему приложению эффективно работать с авторизацией пользователей, которые пришли из приложения Сбербанка, обеспечивая более гладкий и удобный опыт входа.

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

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

ScopeНаименование поля в ответеОписаниеПример
Пакет Light
openid (обязательно)subНеизменный уникальный идентификатор клиента, передаваемый внешним потребителям."sub":"e327493e-979a-461f-9ca5-edfab9d6fbab"
emailemailАдрес электронной почты"email":“personal@mail.ru
mobilephone_numberНомер телефона"phone_number":"+7 (000) 000000”
Пакет Standart
birthdatebirthdateДата рождения (формат ГГГГ-ММ-ДД) "birthdate":"0000-00-00"
namefamily_name, given_name, middle_nameФамилия Имя Отчество

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

"given_name":"Имя"

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

gendergenderПол: 1 – мужчина; 2 – женщина;"gender":1,
Пакет Professional
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"

}

driving_licensedriving_licenseНомер водительского удостоверения

"driving_license":{

"number":"111111"

}

international_passportinternational_passportЗаграничный паспорт гражданина РФ:серия документа (формат 00 00),номер документа(формат 000000),кем выдан, дата выдачи (формат ГГГГ-ММ-ДД),дата окончания (формат ГГГГ-ММ-ДД),имя,фамилия

"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Данные документа, удостоверяющего личность:тип,серия документа (формат 00 00),номер документа (формат 000000),кем выдан, дата выдачи (формат ГГГГ-ММ-ДД),код. Выводится один документ в соответствии со списком приоритетов:Паспорт РФ, Загранпаспорт гражданина РФ, Военный билет, Паспорт моряка, Временное удостоверение, Паспорт иностранного граданина, Вид на жительство иностранного гражданина.
Доступные типы документов:
  • 17 - Паспортгражданина РФ
  • 18 - Загранпаспортгражданина РФ
  • 7 - Военный билетвоеннослужащего
  • 21 - Удостоверениеличности моряка
  • 14 - Временное удостоверение личности гражданина РФ
  • 10 - Паспорт иностранного гражданина
  • 75 - Вид на жительство в РФ иностранного гражданина

"priority_doc":{

"type":17,

"series":"777",

"number":"333",

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

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

"code":"adasd"

}

citizenshipcitizenshipГражданство: последняя по актуальности страна гражданства (наименование на русском языке) и ее код (ОКСМ, буквенное обозначение – Альфа-3)

"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"

}

is_company_employeeis_company_employee Признак сотрудника ПАО "Сбербанк""is_company_employee":true,
stsstsНомер СТС

"sts":{

"number":"00 00 00000"

}

previous_identificationprevious_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":"холост"

}

is_self_employedis_self_employedПризнак самозанятого"is_self_employed":true

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей. Вы можете запретить сохранение cookie в настройках своего браузера.