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

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

Обновлено 7 апреля 2025

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

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

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

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

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

let request = SIDAuthRequest(scope: "openid profile email",
state: "random_state",
nonce: "random_nonce",
redirectUri: "myapp://callback",
codeChallenge: challenge,
codeChallengeMethod: challengeMethod)

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

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

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

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

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

SID.login.auth(withSberId: request, viewController: viewController)

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

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

SID.login.autoAuth(request: request) { success in
if success {
print("Аутентификация успешна")
// Выполнить действия после успешной аутентификации
} else {
print("Ошибка аутентификации")
// Обработать ошибку аутентификации
}
}

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

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

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

class YourViewController: UIViewController, SIDSafariViewControllerDelegate {

func initiateSberIDAuthorization() {
let request = SIDAuthRequest(/* Настройка запроса */)
let success = SID.login.soleLoginWebPageAuth(
sberIdRequest: request,
svcRedirectUrlString: "Ваш диплинк",
viewController: self
)
if success {
// Авторизация была успешно инициирована
} else {
// Обработка ошибки инициации авторизации
}
}

// Дополнительные методы делегата SIDSafariViewControllerDelegate, если необходимо
}

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

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

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

После успешной авторизации пользователь будет перенаправлен обратно в ваше приложение. Вам необходимо обработать ответ, используя 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
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей. Вы можете запретить сохранение cookie в настройках своего браузера.