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

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

Обновлено 4 апреля 2024

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

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

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

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

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

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

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

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

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

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

SIDManager.auth(withSberId: request, viewController: viewController)

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

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

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

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

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

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

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

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

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

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

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

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

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
SIDManager.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Наименование параметра в ответеОписаниеПример ответа
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"

}

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 в настройках своего браузера.