Авторизация пользователя

Схема авторизации

Контуры для авторизации пользователей

Для авторизации (/v2/oauth/authorize) смс пользователя необходимо отправлять запрос на:

  • Тестовый контур https://edupir.testsbi.sberbank.ru:9443
  • Промышленный контур https://sbi.sberbank.ru:9443

Для авторизации (/v2/oauth/authorize) токен пользователя необходимо отправлять запрос на:

  • Тестовый контур http://localhost:28016
  • Промышленный контур http://localhost:28016

Для обращения к ресурсам /v2/oauth/token, /v1/oauth/user-info, /v1/change-client-secret необходимо отправлять запрос на:

  • Тестовый контур https://edupirfintech.sberbank.ru:9443
  • Промышленный контур https://fintech.sberbank.ru:9443

Шифрование данных

Возможность получать зашифрованные ответы на REST-запросы SberBusiness ID предусмотрена только для токеновых (РутокенTLS и VPNKeyTLS) клиентов СББОЛ.

Возможность шифрования ответов реализована в следующих REST-запросах: Получение авторизационного токена (access_token/refresh_token), Получение информации о клиенте (user-info).

Для того, чтобы получать ответы в шифрованном виде Партнеру необходимо в Банк предоставить следующую информацию: Алиас криптопрофиля и Серийный номер TLS-сертификата, который будет использоваться при шифровании.

Алгоритм авторизации пользователя

1. Для работы токен пользователей, на тестовом стенде, необходимо получить VPNKeyTLS-токен у своего менеджера или написать на fintech_API@sberbank.ru.

2. Авторизация в токене происходит после запуска .exe файла в токене и ввода ПИН-кода. Список ПИН-кодов направляется клиенту после передачи токена в электронном виде.

3. После авторизации в интерфейсе токена необходимо выбрать БС EDUPIR (бизнес система тестового стенда EDUPIR) и авторизоваться в СББОЛ.

4. Для возможности подписывать документы необходимо выпустить сертификат ЭП:

4.1 Через интерфейс СББОЛ по документации Как выпустить сертификат электронной подписи без визита в банк.

4.2 Через SberBusiness API по документации Криптографические ресурсы.

5. После создания запроса необходимо отправить информацию в поддержку supportdbo2@sberbank.ru, для регистрации сертификата в УЦ Банка, в формате:

- Стенд:EDUPIR
- ClientId и логин тестового пользователя
- BicryptID (КУЦ + номер сертификата)
- Логин владельца сертификата или название организации
- Дата отправки запроса на сертификат
- Текст/Комментарий: (при необходимости)

6. После регистрации в УЦ поступит ответ от supportdbo2@sberbank.ru о готовности сертификата.

7. Необходимо активировать сертификат:

7.1 Через интерфейс СББОЛ по документации Как выпустить сертификат электронной подписи без визита в банк.

7.2 Через SberBusiness API по документации Криптографические ресурсы.

8. Cертификат активирован и готов к работе.

Ресурс /v2/oauth/authorize

В рамках запроса кода авторизации /sso/api/v2/oauth/authorize доступна возможность перевода клиента на модель оплаты «по подписке».

Перевод клиента на подписку можно использовать в следующих случаях:

  • При необходимости изменить модель оплаты на «подписку» для действующих клиентов.
  • При необходимости предоставить клиенту бесплатный доступ к сервису с возможностью перевести на платный тариф.

Для перевода клиента на подписочную модель оплаты в rest-запросе GET на конечную точку /sso/api/v2/oauth/authorize в параметре "scope" должен быть указан атрибут PAYMENT_SUBSCRIPTION.

Запрос кода авторизации используется для проверки успешной аутентификации клиента в АС СББОЛ. Если клиент переходит из банка по ссылке, Партнеру требуется предварительно распознать переход клиента по ссылке. После распознавания партнер должен перенаправить клиента обратно вместе с запросом кода авторизации, сформированным c помощью метода GET. В том случае, если клиент начинает работу на стороне сервиса партнера без предварительного перехода из банка по ссылке, партнер должен отправить клиента вместе с запросом кода авторизации, сформированным с помощью метода GET, без предварительных действий на соответствующий сервис SSO СББОЛ.

Если партнерский сервис переадресовал token-клиента на страницу аутентификации sms-клиента, то после ввода логина и пароля появится подсказка для корректной аутентификации. При первичной аутентификации клиенту будет предложено подписать оферту для возможности Партнера отправлять запросы по счетам клиента.

При переходе клиента из банка на сервис партнера в ссылке присутствует параметр loginDCB=true (признак перехода клиента из банка), указывающий партнеру на необходимость перенаправления клиента обратно для авторизации на банковском сервере. Дополнительно в ссылке передаются два параметра:

  • Тип пользователя:

    • userType=WEB — для пользователей, использующих SMS-подтверждение;
    • userType=Token — для пользователей, осуществляющих аутентификацию с помощью устройства защиты.
  • Значение порта callbackPort (для пользователей использующих средства защиты/USB-средства аутентификации).

Эти параметры необходимы для корректного формирования хоста для запросов Authorization Code, Access Token и User Info.


Пример

Для пользователя, использующего SMS-подтверждение при аутентификации, для перехода из банка в сервис партнера будет сформирована ссылка: https://example.ru?loginDCB=true&userType=WEB

Для пользователя, использующего аутентификацию с помощью устройства защиты, для перехода из банка в сервис партнера будет сформирована ссылка: https://example.ru?loginDCB=true&userType=Token&callbackPort=28016

PAYMENT_SUBSCRIPTION - это обязательный для указания атрибут в параметре "scope" для возможности подключения подписки на сервис при использовании Rest-запроса GET на конечную точку /sso/api/v2/oauth/authorize для получения кода авторизации.

Параметры запроса и ответа

Наименование Описание
scope Должен содержать обязательный параметр openid и через пробел перечисляются scope-ы доступных claim и сервисов, полученных от менеджера партнера при регистрации приложения (обязательный параметр при обращении к ресурсу)
response_type Тип запроса (значение должно быть всегда code согласно требованию по обеспечению безопасности, разрешающее использовать исключительно Auth Code Flow (обязательный параметр))
client_id Банковский идентификатор сервиса полученный от менеджера при регистрации приложения (обязательный параметр )
state Параметр для предотвращения CSRF-атак (обязательный параметр)
nonce Значение используется для защиты от атак с повторением токенов (указанное в запросе значение должно соответствовать nonce-значению, возвращаемому в ответе, при этом значение nonce должно быть уникальным в сеансе пользователя и сложным для угадывания (обязательный параметр))
redirect_uri Ссылка на страницу сервиса, на которую необходимо перенаправить пользователя после успешной авторизации (обязательный параметр, должен быть одинаковым, включая все GET параметры, в запросе /authorize и /token)
code_challenge Код вызова, полученный из кода проверки (code_verifier) путем применения метода преобразования code_challenge_method (необязательный параметр)
code_challenge_method Метод преобразования, который был применен к коду проверки (code_verifier), для получения значения кода вызова (code_challenge) (необязательный параметр)
location (read only) Значение redirect_uri для client_id, указанного в запросе авторизации. Если в запросе авторизации указан неверный client_id или redirect_uri, то произойдет переадресация на форму авторизации
сode (read only) Значение кода авторизации. Значение кода авторизации формируется произвольно в формате UUID (случайное значение) плюс «1» или «2» через дефис, например, CD6A56FD-A9C7-4152-AA1D-FA57E550F6AC-2

Формирование параметра State

Параметр служит для защиты от CSRF-атак. Для каждого партнера при регистрации его сервиса в банке указывается ссылка на страницу сервиса партнера, на которую необходимо перенаправить клиента из банка после успешной авторизации (redirect_uri). При поступлении на redirect_uri запроса с кодом авторизации сервис партнера должен проверять, что обмен данными происходит в рамках инициированного им самим взаимодействия.
Значение State должно быть защищено от подбора и храниться таким образом, чтобы его не мог изменить никто, кроме сервиса партнера. Рекомендуется использовать идентификатор сессии клиента в сервисе партнера или один из его производных (например, хэш этого идентификатора), при этом может использоваться любой другой механизм генерации случайного значения достаточной длины для предотвращения подбора. В общем случае оптимально использовать строку длиной не менее 36 символов с проверкой регистра.

Формирование параметра Nonce

Параметр служит для защиты от replay-атак, то есть для предотвращения обработки одного и того же запроса несколько раз. Значение Nonce должно быть защищено от подбора и храниться таким образом, чтобы его не мог изменить никто, кроме сервиса партнера. Рекомендуется использовать случайное значение, сохраняемое в сессии клиента в сервисе партнера. Для повторного запроса это значение должно заменяться новым. В общем случае оптимально использовать строку длиной не менее 10 символов с проверкой регистра.

Формирование хоста для отправки запроса Authorization Code

В зависимости от типа пользователя алгоритм формирования хоста для запросов авторизации должен быть различным:

Указанные выше значения хостов приведены для примера. Реальные значения сообщаются по не автоматизируемым каналам. Значение userType=Token может быть определено по содержимому ID Token (например, по наличию SID2), также по параметрам acr и amr (см. Декодирование ID Token).

Оферта

Для взаимодействия с сервисами партнера клиент должен подписать оферту, в которой указано к каким данным и на какой срок предоставлен доступ партнеру. При предоставлении партнеру доступа к данным своих счетов клиент в явном виде указывает каждый счет, к которому предоставляет доступ. После получения банком запросов со стороны партнера, касающихся клиентских данных, выполняется проверка наличия между партнером и клиентом активной оферты, а при ее отсутствии или истечения срока действия партнеру возвращается сообщение об ошибке доступа к клиентским данным. После того как партнер определит по ссылке переход клиента из банка, он может получить код авторизации (Authorization Code), авторизационный токен для получения доступа к данным клиента (Access Token), идентификационные атрибуты клиента, которые клиент разрешил предоставить партнеру в рамках оферты (при наличии активной оферты).

При отправке запроса необходимо экранировать специальные символы, если сформированная ссылка открывается напрямую в браузере, экранирования не требуется.Время жизни авторизационного кода 120 секунд.

Запрос с экранированием


Пример запроса Пример ответа
GET https://edupir.testsbi.sberbank.ru:9443 /ic/sso/api/v2/oauth/authorize?scope=openid PAY_DOC_RU inn email&response_type=code&client_id=74617&state=af0ifjsldkj&nonce=n-0S6_WzA2Mj&redirect_uri=https%3A%2F%2example.ru HTTP/1.1 302 Found https://example.ru/?code=f710576d-7263-4ec6-a01b-8404aca2850d-1&state=af0ifjsldkj&nonce=n-0S6_WzA2Mj

Запрос без экранирования


Пример запроса Пример ответа
GET https://edupir.testsbi.sberbank.ru:9443 /ic/sso/api/v2/oauth/authorize?scope=openid PAY_DOC_RU inn email&response_type=code&client_id=74617&state=af0ifjsldkj&nonce=n-0S6_WzA2Mj&redirect_uri=https://example.ru HTTP/1.1 302 Found https://example.ru/?code=f710576d-7263-4ec6-a01b-8404aca2850d-1&state=af0ifjsldkj&nonce=n-0S6_WzA2Mj

В случае обнаружения ошибок clientid и redirecturi банк сформирует ответ HTTP 400 с ошибкой invalid_grant и описанием:

  • Redirect uri https://example.ru is invalid - неверный redirect_uri
  • Invalid client secret for authz code 'хххххххх-хххх-хххх-хххх-хххххххххххх-х'

В случае если банк вернет ответ с ошибкой авторизации, сервис должен корректно его обработать. Так как первый шаг взаимодействия (аутентификация) осуществляется через браузер пользователя, банк вернет HTTP ответ 302 Found. Это необходимо для того, чтобы сервис имел возможность обработать ошибку и отобразить пользователю необходимую ему страницу, например, страницу авторизации (рекомендовано).

Список доступных claim

Параметр Описание
active Признак активности пользователя
sid2 Идентификатор сессии токена
sbbol Признак использования «Дизайн СББОЛ 3.0»
sub Хэш идентификатора пользователя
iss URL СББОЛ
aud Идентификатор внешнего сервиса
dboContracts Договоры обслуживания организации
name Фамилия Имя Отчество
inn ИНН организации
email Адрес электронной почты
phone_number Номер телефона
HashOrgId Хэш от идентификатор организации (orgId)
orgId Идентификатор организации в СББОЛ
orgGuid Глобальный идентификатор организации
orgKpp КПП
orgFullName Полное наименование компании
OrgName Сокращенное наименование организации
orgOgrn ОГРН компании
orgOkpo ОКПО организации
orgOktmo Общероссийский классификатор территорий муниципальных образований
orgActualAddress Фактический адрес компании
orgJuridicalAddress Юридический адрес компании
accounts Счет, БИК, Кор. счет компании. Примечание: не заполняется при запросе Партнером информации о пользователе своей организации
terBank Полное наименование подразделения кредитной организации
offerExpirationDate Дата окончания оферты
userPosition Должность
userRoles Список роли пользователя
userSignatureType Тип подписи
userGuid Идентификатор пользователя клиента, который обратился к сервису
userId Внутренний идентификатор пользователя
userGroups Группы пользователя
sbbol3 Признак использования клиентом нового дизайна СББОЛ 3.0
userCryptoType Тип криптопрофиля
tbIdentCode Код территориального банка
individualExecutiveAgency Признак Единоличный Исполнительный Орган
inquiryOrder Признак доступности у пользователя функциональности получения справок
isIdentified Признак идентификации пользователя
offerSmartCredit Предодобренные предложения по смарт кредитам
summOfferSmartCredit Сумма предодобренного предложения по смарт-кредитам
resident Признак является организация резидент/нерезидент
orgBusinessSegment Бизнес сегмент. Возможные значения:
02-Микро бизнес (микро),
03-Малый бизнес,
04-Средний бизнес,
05-Крупный бизнес,
06-Крупнейший бизнес,
07-Клиенты машиностроения (ОПК),
08-Рег. госсектор,
09-БМО,
10-Фин. институты,
999-Не найдено сегмента в CRM Корпоративном.
buyOnCreditMmb Признак возможности покупки в кредит на сайте партнера
orgLawFormShort Организационно-правовая форма (принятое сокращение)
branch Сокращенные наименования подразделений, адреса подразделений, номера подразделений
orgIndustryInfo Отрасль организации
orgRegDateINN Дата регистрации ИНН
orgRegDateOGRN Дата регистрации ОГРН
orgKindActivityInfo Информация о виде деятельности организации
orgBusinessSegmentName Наименование бизнес-сегмента

Список доступных сервисов

Операция Описание
PAY_DOC_RU_INVOICE Выставление счета на оплату по фиксированным реквизитам
GET_CLIENT_ACCOUNTS Получение информации о счетах подключенного клиента
GET_STATEMENT_ACCOUNT Получение выписки по счету клиента
GET_STATEMENT_TRANSACTION Получение печатной формы выписки по одной операции
PAY_DOC_RU Рублевое платежное поручение
PAYROLL Зарплатная ведомость
FILES Выгрузка/загрузка файлов
CARD_ISSUE Электронный реестр на открытие счетов и выпуск карт
SALARY_AGREEMENT Зарплатный договор
DICT Справочник
SALARY_AGREEMENT_REQUEST Заявка на удаленное подключение Зарплатного проекта
PAYMENTS_REGISTRY Реестр платежей
DEBT_REGISTRY Реестр задолженности
CURRENCY_OPERATION_DETAILS Сведения о валютной операции
PAY_DOC_CUR Валютное платежное поручение
CURR_CONTROL_MESSAGE_TO_BANK Письмо для целей ВК (в банк)
GENERIC_LETTER_TO_BANK Письмо свободного формата (в банк)
CONFIRMATORY_DOCUMENTS_INQUIRY Справка о подтверждающих документах
PAYMENT_REQUEST_OUT Исходящее платежное требование
GET_ADVANCE_ACCEPTANCES Получение сведений о клиентах, подключенных к подпискам и пакетам услуг
GET_PARTNER_OFFERS Получение информации об офертах с внешним сервисом
GET_CRYPTO_INFO Получение криптографической информации
CERTIFICATE_REQUEST Запрос на сертификат
PAY_DOC_RU_INVOICE_ANY Выставление счета на оплату по свободным реквизитам
CLIENT_TARIFF Актуализация тарифа по подключенным сервисам
GENERIC_LETTER_FROM_BANK Письмо свободного формата (из банка)
CURR_CONTROL_MESSAGE_FROM_BANK Письмо для целей ВК (из банка)
GET_CUSTOMER_INFO Получение информации по клиенту (реквизиты организации и пользователей)
GET_CRYPTO_INFO_EIO Получение сертификатов открытых ключей электронной подписи пользователей организации (ЕИО)
GET_CLIENTS_CHANGES Получение списка клиентов, по которым произошли изменения
EI_FLAG_MASTER_CONNECT Запрос на изменение признака регистрации пользователя в E-Invoicing
EI_DOC_COUNT Уведомление об актуальном количестве документов в E-Invocing
GET_CLIENTS_ADDED Получение списка клиентов, подключенных в ВСП
GET_STATEMENT_RUR_ID Получение рублевой операции по выписке
ORDER_MANDATORY_SALE Распоряжение на перевод с транзитного счета
CURRENCY_NOTICES Уведомление о поступлении денежных средств на транзитный валютный счет
BANK_CONTROL_STATEMENT Ведомость банковского контроля (ВБК в банк)
CURR_BUY Покупка и конверсия валюты
CURR_SELL Продажа валюты
EI_CLOSING_DOCUMENTS Наличие закрывающих документов по платежному поручению
CASH_HOLD Сервисы холдирования денежных средств на расчетном счете клиента
BANK_CONTROL_STATEMENT_CHANGE_APPLICATION Заявление о внесении изменений в I раздел ВБК
CRYPTO_CERT_REQUEST_EIO Запрос на выпуск сертификата для ЕИО
CLIENT_ACCRUAL Начисление платы за пользование сервисом
ENCASH_DOCUMENTS Получение и передача информации по документам инкассации
CONTRACT_CLOSE_APPLICATION Заявление о снятии с учета контракта (кредитного договора)
PAYMENT_REQUEST_IN Входящее платежное требование
COLLECTION_ORDERS Рублевое инкассовое поручение
ACCEPTANCE_LETTER Заявление об акцепте (отказе от акцепта)
GET_CORRESPONDENTS Получение списка контрагентов
WEBHOOK Заявка на получение уведомлений о событии
SELF_ENCASHER_NEW_PASSWORD Генерация нового пароля вносителя самоинкассации
SELF_ENCASHER_BLOCK Блокировка вносителя самоинкассации
SELF_ENCASHER_REQUEST Заявления на создание нового вносителя самоинкассации
GET_TARIFF_PLANS Получение списка тарифных планов пользователя организации
GET_TARIFF_PLANS_LIST_AVAILABLE Получение списка тарифных планов, доступных партнерскому сервису
CREDIT_REQUEST Запрос на создание заявок на кредит
CORRESPONDENT_CUR_ADDITIONAL Дополнительная информация по валютному контрагенту (бенефициару)
TARIFF_PLAN_MANAGEMENT Запрос на подключение/отключение тарифного плана организации в формате JSON
TARIFF_PLAN_MANAGEMENT_JWS Запрос на подключение/отключение тарифного плана организации в формате JWS
EXTERNAL_SYSTEM_AUTH_PROFILE Авторизационные данные пользователя во внешних системах
GET_REQUEST_STATISTICS Запрос на получение статистики по количеству запросов в API
NOTIFY_MESSAGES Запрос на отправку уведомления клиенту
PAY_DOC_RU_INVOICE_BUDGET Рублевое платежное поручение с бюджетным реквизитами, легкая форма
PAYMENT_SUBSCRIPTION Списание средств по подписке
GET_CLIENTS_ADDED_VSP Получение списка клиентов, подключенных в ВСП за период
SBERRATING_VALUES Запрос на изменение параметров услуги Внутренние источники
SBERRATING_VALUES_GET Детальная информация по CберРейтинг
GET_CREDIT_OFFERS Получение информации по кредитным предложениям
CORPORATE_CARD_REQUEST Создание заявления на открытие бизнес-карты
CORPORATE_CARDS Получение информации по бизнес-картам

Ресурс /v2/oauth/token

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

Шаги

1. Определить переход клиента по ссылке (опционально).

2. Получить код авторизации.

3. Отправить запрос.

4. Декодировать ID Token.

5. Проверить подпись Банка.

6. Получить авторизационный токен в зашифрованном виде (опционально).

7. Актуализация авторизационного токена.

8. Получить новую пару в зашифрованном виде (опционально).


Обмен кода авторизации на Access Token происходит через меж серверные каналы (REST-сервис), поэтому значение хоста не зависит от типа пользователя (userType). В случае возникновения ошибки при попытке получить AccessToken по коду авторизации по каким-либо причинам (например, неправильно передан client_secret) код авторизации удаляется и все дальнейшие попытки получить по нему AccessToken (даже с корректными параметрами) будут приводить к ошибке с текстом «Unknown code = <код_авторизации>». Запрос должен производиться только методом POST с типом данных application/x-www-form-urlencoded.

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

Модель запроса и ответа

Наименование Описание
grant_type Значение должно быть «authorization_code» (обязательный параметр)
code Значение кода авторизации (обязательный параметр)
client_id Банковский идентификатор сервиса полученный от менеджера при регистрации приложения (обязательный параметр )
client_secret Авторизационный ключ сервиса (обязательный параметр). Генерируется банком в момент заведения сервиса и передается оффлайн. После получения требуется, в обязательном порядке, сменить client_secret методом /v1/change-client-secret или в Личном кабинете SberBusinessAPI. В дальнейшем, требуется менять client_secret до истечения срока жизни, составляющего 40 дней.
redirect_uri Ссылка на страницу сервиса, на которую необходимо перенаправить пользователя после успешной авторизации (обязательный параметр, должен быть одинаковым, включая все GET параметры, в запросе /authorize и /token)
code_verifier Код проверки, на основе которого получили код вызова (code_challenge) путем применения метода преобразования code_challenge_method(необязательный параметр)
access_token Авторизационный токен к данным организации
refresh_token Токен обмена
token_type Всегда равен «Bearer»
expires_in Время жизни access_token в секундах
id_token Закодированный в Base64URL набор атрибутов пользователя, необходимых для идентификации пользователя. Атрибуты разделены символами «.», каждый необходимо декодировать отдельно.
scope Должен содержать обязательный параметр «openid» и через пробел перечисляются scope-ы доступных claim и сервисов, полученных от менеджера партнера при регистрации приложения (обязательный параметр при обращении к ресурсу)

При отправке запроса необходимо экранировать специальные символы, если сформированная ссылка открывается напрямую в браузере, экранирования не требуется. Время жизни авторизационного токена 60 минут.

Пример запроса

POST /ic/sso/api/v2/oauth/token
https://edupirfintech.sberbank.ru:9443
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code= CD6A56FD-A9C7-4152-AA1D-FA57E550F6AC-2
&client_id=1001
&client_secret=Ac03df04fff8
&redirect_uri=https%3A%2F%2Fclient.example.ru%2Fcb

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
   "scope":"openid PAYROLL name",
   "access_token":"c76fb018-27c9-43f7-a751-62646eda7e1a-1",
   "token_type":"Bearer",
   "expires_in":3600,
   "refresh_token":"03e0be32-e72e-47ec-b740-a00b333a8ac4-1",
   "id_token":"eyJhbGciOiJnb3N0MzQtMTAuMjAxMiJ9.eyJzdWIiOiIwZDYxNTI3NDRlNDhkMTU4Y2UwMWQ3ZDQwZTdjNzUwYmZhMT
VmMWVhY2NkOTQ3YmYwYTU0NzRhNDkwMGMyZTdjIiwiaXNzIjoiaXNzLWRlZmF1bHQtdmFsdWUiLCJhdWQiOiIxMTQzIiwiZXhwIjox
NTE4NzAxMDcxLCJpYXQiOjE1MTg3MDA3NzEsImF1dGhfdGltZSI6MTUxODcwMDc1NiwiYWNyIjoibG9hLTMiLCJhbXIiOiJ7cHdkLCBtY2
EsIG1mYSwgb3RwLCBzbXN9IiwiYXpwIjoiMTE0MyIsIm5vbmNlIjoiN2JlNjZhYzktZDA3Yy00OTY3LWFkZWQtY2EyNzBhMjdlOWU4In0=.
EdiC77+9bO+/vRzvv71677+977+977+9eAXvv73vv73vv71E77+977+977+977+9Re+/ve+/vTNbbdm0Bu+/vRY/eO+/vRvvv70q77+
977+9LO+/vU4iZO+/vSNF0oFy77+977+977+9GQnvv73vv70v77+9QO+/vXk="
}

В случае обнаружения ошибок clientid и redirecturi банк сформирует ответ HTTP 400 с ошибкой invalid_grant и описанием:

  • Redirect uri https://example.ru is invalid - неверный redirect_uri;
  • Invalid client secret for authz code 'хххххххх-хххх-хххх-хххх-хххххххххххх-х';

В случае если банк вернет ответ с ошибкой авторизации, сервис должен корректно его обработать. Так как первый шаг взаимодействия (аутентификация) осуществляется через браузер пользователя, банк вернет HTTP ответ 302 Found. Это необходимо для того, чтобы сервис имел возможность обработать ошибку и отобразить пользователю необходимую ему страницу, например, страницу авторизации (рекомендовано).

При получении ответа сервис должен проверить его корректность в соответствии со спецификацией. Рекомендации по проверке ответа на запрос Access Token описаны в спецификациях:

Декодирование ID Token

При необходимости декодировать ID Token следует воспользоваться алгоритмом Base64URL Encoding. Согласно спецификации JSON Web Token (JWT) ID Token должен быть представлен структурой вида:

  • Алгоритм подписи (по сертификату технологического криптопрофиля Банка, который можно получить запросом /crypto), Header(Заголовок);
  • ID_token, Payload (Полезная нагрузка);
  • Электронная подпись.

Каждая часть ответа, разделенная точкой, должна декодироваться отдельно. Для проверки подписи в поле id_token на стороне пользователя, необходимо вычислить подпись публичным ключом Банка, декодировав блок Header и Payload по Base64URL (содержимое между двумя точками). Далее необходимо сравнить полученное значение c блоком Электронная подпись (содержимое после второй точки), декодированным по Base64URL.

Пример ответа Id Token

eyJhbGciOiJnb3N0MzQtMTAuMjAxMiJ9.eyJzdWIiOiJ
hMWNhOGYyMTQ4MDc1M2IyMzI1MTZiYzk4NmNiZ
mM4Yjc5MjNiYWI3ODczODQzZWM0ZjQ1MTA4MmI
0YTg3NjFjIiwiaXNzIjoiaHR0cDovL3NidC1vYWZzLTYz
ODo5MDgwL2ljZGsiLCJhdWQiOiIyMDg1IiwiZXhwIjox
NTE4Njg2MDI1LCJpYXQiOjE1MTg2ODU3MjUsImF1d
GhfdGltZSI6MTUxODY4NTM4NSwiYWNyIjoibG9hLT
MiLCJhbXIiOiJ7cHdkLCBtY2EsIG1mYSwgb3RwLCBz
bXN9IiwiYXpwIjoiMjA4NSIsIm5vbmNlIjoiOTc2MjgwY
2ZmZTg5In0=.AGnvv73vv73vv71iFGM977+9We+/vU
vvv73vv704Re+/ve+/vWnvv73vv71y77+9dQh+77+9
GR1377+9Ml8T77+9ae+/vTbvv73Gle+/vU1t77+977+
977+977+97LKk77+9XyQRPFEl77+977+9

Пример декодированного ответа

{
   "typ":"JWT",
   "alg":"gost34.10-2012"
}
{
   "sub":"a1ca8f21480753b232516bc986cbfc8b7923bab7873843ec4f451082b4a8761c",
   "iss":"https://edupirfintech.sberbank.ru:9443",
   "aud":"2085",
   "exp":1518686025,
   "iat":1518685725,
   "auth_time":1518685385,
   "acr":"loa-3",
   "amr":"{pwd, mca, mfa, otp, sms}",
   "azp":"2085",
   "nonce":"976280cffe89"
}
AGnvv73vv73vv71iFGM977+9We+/vUvvv73vv704Re+/ve+/vWnvv73vv71y77+9dQh+77+9
GR1377+9Ml8T77+9ae+/vTbvv73Gle+/vU1t77+977+
977+977+97LKk77+9XyQRPFEl77+977+9

Параметр Описание
iss URL сервиса, сформировавшего ID Token
sid2 Идентификатор сессии устройства защиты
sub Хэш банковского идентификатора пользователя
aud Идентификатор сервиса, для которого формируется ID Token
nonce Значение параметра nonce из запроса кода авторизации
exp Время, после которого ID Token не принимается для обработки. Формат поля Unix time.
iat Время формирования ID Token. Формат поля Unix time.
auth_time Время банковской аутентификации пользователя. Формат поля Unix time.
acr Уровень аутентификации пользователя: acr=loa-2 (пользователь аутентифицируется с помощью устройства защиты) acr=loa-3 (пользователь использует подтверждение по одноразовому SMS-паролю для аутентификации)
amr Методы аутентификации: Amr=pwd — пользователь аутентифицируется с помощью устройства защиты; amr= {pwd, mca, mfa, otp, sms} — пользователь использует подтверждение по одноразовому SMS-паролю для аутентификации
azp Идентификатор сервиса (рекомендуется проверить идентификатор сервиса, для которого был сформирован полученный ID Token)
HashOrgId Хэш от идентификатора организации, с которой связан пользователь
Если банку не удаётся предоставить какие-то данные, такой атрибут отсутствует в ответе (не должно быть атрибутов со значением NULL).

Проверка подписи Банка

Согласно стандарту OpenID Connect проверка электронной подписи, полученной в ID Token (содержимое ответа ID Tokena после второй точки), выполняется, используя алгоритм, указанный в параметре заголовка JWT alg. Партнеру необходимо проверить подпись сертификатом Банка.

Получение авторизационного токена в зашифрованном виде

Для того, чтобы на запрос токена доступа получить ответ в зашифрованном виде необходимо в запросе передать http-заголовок Accept со значением application/jose, тогда сформированный не ошибочный ответ (код ответа 200) будет представлен в JOSE в представлении JWE Compact Serialization. При этом в ответе также будет содержаться http-заголовок Content-Type со значением application/jose.

JWE Compact Serialization состоит из 5 частей, разделитель между частями - символ '.'

В нашем случае структура JWE Compact Serialization будет иметь следующий вид: BASE64URL(UTF8(JWE Protected Header)) || '.' '.' '.' || BASE64URL(JWE Ciphertextyou ) || '.'

Защищенный заголовок (Protected Header) будет иметь следующий вид:

"typ": "JOSE",
"enc": "gost28147-89",
"kid": "UUID TLS-сертификата, который был использован при шифровании"

Параметр enc содержит алгоритм, по которому был зашифрован ответ, в нашем случае gost28147-89.

Пример JWE Compact Serialization

eyJ0eXAiOiJKT1NFIiwiZW5jIjoiZ29zdDI4MTQ3LTg5Iiwia2lkIjoiNzc4NkE0QkJCNTg4QjZBQTQ4MTEifQ...
MIIHLAYJKoZIhvcNAQcDoIIHHTCCBxkCAQCgggSfoIIEmzCCBJcwggRGoAMCAQICCneGpLu1iLaqSBEwCAYGKoUDA
gIDMIIBEzELMAkGA1UEBhMCUlUxLzAtBgNVBAoMJtCe0JDQniAi0KHQsdC10YDQsdCw0L3QuiDQoNC-0YHRgdC40L
giMU0wSwYDVQQLDETQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAg0KHQkSDQoNCkICjQotC
10YHRgtC-0LLRi9C5KTE-MDwGA1UEAww10JvQsNCy0YDQuNC90KHQki3QotC10YHRgtC-0LLQsNGPINC_0LXRh9Cw
0YLRjC3Qo9CmLTkxITAfBgNVBCEMGNCi0LXRgdGC0LjRgNGD0Y7RidC40LkgUTEhMB8GCSqGSIb3DQEJARYSY2FzY
nJmQHNiZXJiYW5rLnJ1MB4XDTE5MDkxMzA5MTAwMFoXDTIyMDkxMzA5MTE0NlowggE0MS8wLQYDVQQDDCbQn9C10Y
LRgCDQn9C10YLRgNC-INCf0LXRgtGA0L7QstC40YfQqjERMA8GA1UEBAwI0J_QtdGC0YAxJjAkBgNVBCoMHdCf0LX
RgtGA0L4g0J_QtdGC0YDQvtCy0LjRh9CqMQswCQYDVQQGEwJSVTFzMHEGA1UECgxq0J7QsdGJ0LXRgdGC0LLQviDR
gSDQvtCz0YDQsNC90LjRh9C10L3QvdC-0Lkg0L7RgtCy0LXRgtGB0YLQstC10L3QvdC-0YHRgtGM0Y4gItCc0LDRi
NCwINC4INCc0LXQtNCy0LXQtNGMIjEOMAwGA1UECwwFcWV3cWUxEjAQBgNVBCEMCUJvb3Nzc3NzczEgMB4GCSqGSI
b3DQEJARYRcXdlcXdlcUBtYXJycnIucnIwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAgYHKoUDAgIeAQNDAARArVLHRJL
dJl0SnsxGemCQ86Q8_9ZVBpV3KWRHLCLBXSWGGuqF5JoSBtWtNhbuA26bBRg2V7pPhQ0Rdc7oIPa4DaOCAVMwggFP
MGAGBSqFA2RvBFcMVdCh0YDQtdC00YHRgtCy0L4g0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C-
0LTQv9C40YHQuCAi0KDRg9GC0L7QutC10L0g0K3QptCfIDIuMCDQoCIwEwYDVR0gBAwwCjAIBgYqhQNkcQEwJgYHK
oUDA3sDAQQbDBlBMDAyQVIyMHTQn9C10YLRgCDQny4g0J8uMBQGByqFAwN7AwQECQYHKoUDA3sFBDAOBgNVHQ8BAf
8EBAMCBPAwFAYJYIZIAYb4QgEBAQH_BAQDAgeAMBYGA1UdJQEB_wQMMAoGCCsGAQUFBwMCMBoGByqFAwN7AwUEDww
NVExTMDk4MjYwNzQzMDAdBgNVHQ4EFgQU5rnb2j7CXqcq3qijl32MWcYW_4owHwYDVR0jBBgwFoAUm1I0EBH4CDR3
jgrM1iYY3L4YOZwwCAYGKoUDAgIDA0EAT_HWRP_z_gCdULkErGU064jF5vLjJNfJMXlRnczgxVV6upiaymDBhzLRe
usDu_GWhHN60R5nXFm198nL2FeJzTGB5DCB4QIBAoAU5rnb2j7CXqcq3qijl32MWcYW_4owHAYGKoUDAgITMBIGBy
qFAwICIwIGByqFAwICHgEEgacwgaQwKAQgdwZVJsvegalqQ77sq1S-jVR6pCRM0Cgt8HZ-jEkLPYEEBH9zoq-
geAYHKoUDAgIfAaBjMBwGBiqFAwICEzASBgcqhQMCAiMCBgcqhQMCAh4BA0MABECS5OvuccLjdTdcOYimPuwSkUeI
YWJo2DTO_k3SA2KqUSiCaTOvqMiilAB38PifHyaKUJes5L8ATBQVQI4k4cdzBAg7W1ft3h_pvTCCAYgGCSqGSIb3D
QEHATAdBgYqhQMCAhUwEwQIg62WM7xqUQsGByqFAwICHwGAggFaHd5avG4mj9ZTziRO1jOWw2GOWIm6DaznkGeczv
l6AUBQpyDYu1UfDxYGPioViYAFurctxDNMIIOYtvrj0eCar0YLQ10hHWN11aXZHlJ-7uBzQ3f4vX-vBhruThg0UjW
U8A0qrf-BwzclWf92rLT9ycLhVRX_XQX22_Wh29MtK3GAAoiEG9QKivQgXMylN3Vv2TIlK0z6cmIApgaDY9pS7M_X
zsvA2c1upbpIP3tZfaDaKpw1RlcbfpXkqRHjSuiYq4x8kv4uaN70Cnj2ny7jUVYKaDWz7zQ0To_-
TyqFPQkfzTzdb4JIcGxMU27dF8vWtns3wW3BDsFvH_5kHMCzuWtuFZtKVhbwdwsZ6EzrvEnSB9epDcOXfaIvNkBCm
tkLRuIW3gHYqt8IcuyUrNOXwNGY7DK5Dkn4wrRYthkE7tnNYcYy9FIjHxW2Fcn5woJXbenR0yXlBmgLOQ.

Пример декодированного (из BASE64URL) Protected Header

{
   "typ":"JOSE",
   "enc":"gost28147-89",
   "kid":"7786A4BBB588B6AA4811"
}

Описание алгоритма расшифрования

Для того, чтобы расшифровать JWE Ciphertext необходимо выполнить следующие действия на VPNKeyTLS:

Проинициализировать устройство (INITDECIPHERID) путем передачи части с заголовком. Внести данные для расшифрования (DECIPHER_ID – 1 или более вызовов) и получить в ответ расшифрованные данные

Запросы необходимо отправлять на http://localhost:28016/vpnkeylocal/<SID2>/, где SID2-идентификатор сессии, получаемый после перехода в бизнес-систему.

Инициализация расшифрования

Модель запроса и ответа

Наименование Описание
id
Тип: ID_FORMAT
INIT_DECIPHER_ID
head
Тип: BASE64
Для прошивок 399+: 2048 URL-encoded байтов base64;
Для прошивок 500+: 2048 байт бинарных данных (размер base64, требуемый для их кодировки, не регламентирован)
obj_id
Тип: HANDLE
8 байт
mode
Тип: ENUM
1, 2

Пример запроса

POST http://localhost:28016/vpnkeylocal/iJbnPrTXFHOd85ZxdKQyrqGV9cOe11WmCY/
POST data:
id=INIT_DECIPHER_ID&head=MIIHLAYJKoZIhvcNAQcDoIIHHTCCBxkCAQCgggSfoIIEmzCCBJcwggRGoAMCAQIC
CneGpLu1iLaqSBEwCAYGKoUDAgIDMIIBEzELMAkGA1UEBhMCUlUxLzAtBgNVBAoMJtCe0JDQniAi0KHQsdC10YDQs
dCw0L3QuiDQoNC%2B0YHRgdC40LgiMU0wSwYDVQQLDETQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQ
vdGC0YAg0KHQkSDQoNCkICjQotC10YHRgtC%2B0LLRi9C5KTE%2BMDwGA1UEAww10JvQsNCy0YDQuNC90KHQki3Qo
tC10YHRgtC%2B0LLQsNGPINC%2F0LXRh9Cw0YLRjC3Qo9CmLTkxITAfBgNVBCEMGNCi0LXRgdGC0LjRgNGD0Y7Rid
C40LkgUTEhMB8GCSqGSIb3DQEJARYSY2FzYnJmQHNiZXJiYW5rLnJ1MB4XDTE5MDkxMzA5MTAwMFoXDTIyMDkxMzA
5MTE0NlowggE0MS8wLQYDVQQDDCbQn9C10YLRgCDQn9C10YLRgNC%2BINCf0LXRgtGA0L7QstC40YfQqjERMA8GA1
UEBAwI0J%2FQtdGC0YAxJjAkBgNVBCoMHdCf0LXRgtGA0L4g0J%2FQtdGC0YDQvtCy0LjRh9CqMQswCQYDVQQGEwJ
SVTFzMHEGA1UECgxq0J7QsdGJ0LXRgdGC0LLQviDRgSDQvtCz0YDQsNC90LjRh9C10L3QvdC%2B0Lkg0L7RgtCy0L
XRgtGB0YLQstC10L3QvdC%2B0YHRgtGM0Y4gItCc0LDRiNCwINC4INCc0LXQtNCy0LXQtNGMIjEOMAwGA1UECwwFc
WV3cWUxEjAQBgNVBCEMCUJvb3Nzc3NzczEgMB4GCSqGSIb3DQEJARYRcXdlcXdlcUBtYXJycnIucnIwYzAcBgYqhQ
MCAhMwEgYHKoUDAgIjAgYHKoUDAgIeAQNDAARArVLHRJLdJl0SnsxGemCQ86Q8%2F9ZVBpV3KWRHLCLBXSWGGuqF5
JoSBtWtNhbuA26bBRg2V7pPhQ0Rdc7oIPa4DaOCAVMwggFPMGAGBSqFA2RvBFcMVdCh0YDQtdC00YHRgtCy0L4g0Y
3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C%2B0LTQv9C40YHQuCAi0KDRg9GC0L7QutC10L0g0K3QptCfIDIuMCDQo
CIwEwYDVR0gBAwwCjAIBgYqhQNkcQEwJgYHKoUDA3sDAQQbDBlBMDAyQVIyMHTQn9C10YLRgCDQny4g0J8uMBQGBy
qFAwN7AwQECQYHKoUDA3sFBDAOBgNVHQ8BAf8EBAMCBPAwFAYJYIZIAYb4QgEBAQH%2FBAQDAgeAMBYGA1UdJQEB%
2FwQMMAoGCCsGAQUFBwMCMBoGByqFAwN7AwUEDwwNVExTMDk4MjYwNzQzMDAdBgNVHQ4EFgQU5rnb2j7CXqcq3qij
l32MWcYW%2F4owHwYDVR0jBBgwFoAUm1I0EBH4CDR3jgrM1iYY3L4YOZwwCAYGKoUDAgIDA0EAT%2FHWRP%2Fz%2F
gCdULkErGU064jF5vLjJNfJMXlRnczgxVV6upiaymDBhzLReusDu%2FGWhHN60R5nXFm198nL2FeJzTGB5DCB4QIB
AoAU5rnb2j7CXqcq3qijl32MWcYW%2F4owHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEgacwgaQwKAQgdwZ
VJsvegalqQ77sq1S%2BjVR6pCRM0Cgt8HZ%2BjEkLPYEEBH9zoq%2BgeAYHKoUDAgIfAaBjMBwGBiqFAwICEzASBg
cqhQMCAiMCBgcqhQMCAh4BA0MABECS5OvuccLjdTdcOYimPuwSkUeIYWJo2DTO%2Fk3SA2KqUSiCaTOvqMiilAB38
PifHyaKUJes5L8ATBQVQI4k4cdzBAg7W1ft3h%2FpvTCCAYgGCSqGSIb3DQEHATAdBgYqhQMCAhUwEwQIg62WM7xq
UQsGByqFAwICHwGAggFaHd5avG4mj9ZTziRO1jOWw2GOWIm6DaznkGeczvl6AUBQpyDYu1UfDxYGPioViYAFurctx
DNMIIOYtvrj0eCar0YLQ10hHWN11aXZHlJ%2B7uBzQ3f4vX%2BvBhruThg0UjWU8A0qrf%2BBwzclWf92rLT9ycLh
VRX%2FXQX22%2FWh29MtK3GAAoiEG9QKivQgXMylN3Vv2TIlK0z6cmIApgaDY9pS7M%2FXzsvA2c1upbpIP3tZfaD
aKpw1RlcbfpXkqRHjSuiYq4x8kv4uaN70Cnj2ny7jUVYKaDWz7zQ0To%2F%2BTyqFPQkfzTzdb4JIcGxMU27dF8vW
tns3wW3BDsFvH%2F5kHMCzuWtuFZtKVhbwdwsZ6EzrvEnSB9epDcOXfaIvNkBCmtkLRuIW3gHYqt8IcuyUrNOXwNG
Y7DK5Dkn4wrRYthkE7tnNYcYy9FIjHxW2Fcn5woJXbenR0yXlBmgLOQ%3D%3D&mode=1

Параметры ответа

Наименование Ограничение Назначение
retcode
Тип: ENUM
2 байт код возврата функции
ctx_handle
Тип: HANDLE
8 байт хендл контекста операции
body_displ
Тип: NUMBER
2^32 - 1 размер (смещение) начала CMS в чистом виде (до кодирования base64)

Пример ответа

ctx_handle="Zp6LrtRE"&body_displ="0"&retcode="1"

Расшифрование данных

Наименование Ограничение Назначение
id
Тип: ID_FORMAT
DECIPHER_ID id функции
data
Тип: BASE64
Для прошивок 399+: 6144 URL-encoded байтов base64;
Для прошивок 500+ чётных версий и нечётных ранее 507:
для режима КС1: 15360 байтов бинарных данных;
для режима КС2: 16777216 байтов бинарных данных;
для нечётных 507 и выше: 2^64 - 1 байтов бинарных данных;
(размер base64, требуемый для их кодировки, не ограничен)
данные для расшифрования в base64;
размер декодированных данных должен быть кратным 8, начиная с размера (смещения) начала CMS в чистом виде (до кодирования base64)
ctx_handle
Тип: HANDLE
8 байт хендл контекста операции

Пример запроса

POST http://localhost:28016/vpnkeylocal/iJbnPrTXFHOd85ZxdKQyrqGV9cOe11WmCY/
POST data:
id=DECIPHER_ID&data=MIIIWAYJKoZIhvcNAQcDoIIISTCCCEUCAQCgggSfoIIEmzCCBJcwggRGoAMCAQICCneGpLu1iLa
qSBEwCAYGKoUDAgIDMIIBEzELMAkGA1UEBhMCUlUxLzAtBgNVBAoMJtCe0JDQniAi0KHQsdC10YDQsdCw0L3QuiDQoNC%2B
0YHRgdC40LgiMU0wSwYDVQQLDETQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAg0KHQkSDQoNCkICj
QotC10YHRgtC%2B0LLRi9C5KTE%2BMDwGA1UEAww10JvQsNCy0YDQuNC90KHQki3QotC10YHRgtC%2B0LLQsNGPINC%2F0L
XRh9Cw0YLRjC3Qo9CmLTkxITAfBgNVBCEMGNCi0LXRgdGC0LjRgNGD0Y7RidC40LkgUTEhMB8GCSqGSIb3DQEJARYSY2FzY
nJmQHNiZXJiYW5rLnJ1MB4XDTE5MDkxMzA5MTAwMFoXDTIyMDkxMzA5MTE0NlowggE0MS8wLQYDVQQDDCbQn9C10YLRgCDQ
n9C10YLRgNC%2BINCf0LXRgtGA0L7QstC40YfQqjERMA8GA1UEBAwI0J%2FQtdGC0YAxJjAkBgNVBCoMHdCf0LXRgtGA0L4
g0J%2FQtdGC0YDQvtCy0LjRh9CqMQswCQYDVQQGEwJSVTFzMHEGA1UECgxq0J7QsdGJ0LXRgdGC0LLQviDRgSDQvtCz0YDQ
sNC90LjRh9C10L3QvdC%2B0Lkg0L7RgtCy0LXRgtGB0YLQstC10L3QvdC%2B0YHRgtGM0Y4gItCc0LDRiNCwINC4INCc0LX
QtNCy0LXQtNGMIjEOMAwGA1UECwwFcWV3cWUxEjAQBgNVBCEMCUJvb3Nzc3NzczEgMB4GCSqGSIb3DQEJARYRcXdlcXdlcU
BtYXJycnIucnIwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAgYHKoUDAgIeAQNDAARArVLHRJLdJl0SnsxGemCQ86Q8%2F9ZVBpV
3KWRHLCLBXSWGGuqF5JoSBtWtNhbuA26bBRg2V7pPhQ0Rdc7oIPa4DaOCAVMwggFPMGAGBSqFA2RvBFcMVdCh0YDQtdC00Y
HRgtCy0L4g0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C%2B0LTQv9C40YHQuCAi0KDRg9GC0L7QutC10L0g0K3QptCfIDI
uMCDQoCIwEwYDVR0gBAwwCjAIBgYqhQNkcQEwJgYHKoUDA3sDAQQbDBlBMDAyQVIyMHTQn9C10YLRgCDQny4g0J8uMBQGBy
qFAwN7AwQECQYHKoUDA3sFBDAOBgNVHQ8BAf8EBAMCBPAwFAYJYIZIAYb4QgEBAQH%2FBAQDAgeAMBYGA1UdJQEB%2FwQMM
AoGCCsGAQUFBwMCMBoGByqFAwN7AwUEDwwNVExTMDk4MjYwNzQzMDAdBgNVHQ4EFgQU5rnb2j7CXqcq3qijl32MWcYW%2F4
owHwYDVR0jBBgwFoAUm1I0EBH4CDR3jgrM1iYY3L4YOZwwCAYGKoUDAgIDA0EAT%2FHWRP%2Fz%2FgCdULkErGU064jF5vL
jJNfJMXlRnczgxVV6upiaymDBhzLReusDu%2FGWhHN60R5nXFm198nL2FeJzTGB5DCB4QIBAoAU5rnb2j7CXqcq3qijl32M
WcYW%2F4owHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEgacwgaQwKAQgN2n6mDPKLkCbYvWnjfEOzrvMkQ4Rb4eDz
bXzO6O5M4UEBAcGfKigeAYHKoUDAgIfAaBjMBwGBiqFAwICEzASBgcqhQMCAiMCBgcqhQMCAh4BA0MABEBPEe%2BIR0GYa2
6Z77B9FzIKxo3euVtYBELWZb0vkz7yfd6oyGSaN3j83nycBsTu8ZOPzocWgHT9liOIuTXPcZF8BAivndzmaFRyBzCCArQGC
SqGSIb3DQEHATAdBgYqhQMCAhUwEwQIzSoQ3lW4vDkGByqFAwICHwGAggKGOGS%2FPZ95Iiw7m9uK1VhOn8JC5G2s6bTsrd
na9UyNubpVqmfaViS6jqiDNfkQdL4MQSIXuRwGoi7BEQg1tq9kTy%2FgK9IFiaRiVWzfQ9dunCMibmkK8fntSMez%2BvUb3
Ur%2F86Fr0V5DO0YisSyMfGf4G%2BPiDHgEX5OrhvWD6MhS2XKxPFdhxsDjdN6F%2FB49kcVjKIJGpsKM9RKqc7WNTPfHlH
teAhpKJaPKPoFzmRgVziTMRfrILY97T63swAdLgWDRNaVoaZzn4Dk%2F9%2BtFPACwLSo8pi%2BW4GjcqvW16Q%2Bk9Kj%2
BGqa%2FmtwyJeZXghDmxslEiDUcNwXnoI6f6BHzxslFTdMklpqTItRKr%2BfWzc0n5i7Ed3naIggOmzhKjqRWp8Kt%2BaD1
HkeR%2Be0axvUMqDaAEUgLceuOO1pzGtxK64tEO4YZilvlcaEgg9njNG1gLx6zh4Fh4CirSTUWg5dasAxhV80FdZTC75p5U
L%2FFPULQ0z02auJ0rNw9jan2VISdR6cSKpK2vCTjPMw50TQF28%2BPSP1xBjeNF11BaGcEQS%2BbJnXDGycKLlg0Q1Pf9N
sEfScIfqTrpB9gAtoPnEos6sX6cQNIGYEtXgNz7Z73ycnXtgD9P0TzDieJC%2BT1E4Hn6jonN60WskteZzZ0afk3TgH2x6l
%2BZ0bpeQLndnQF0zWXT3WxpSsG4ad2cGcwRiVplFXctn%2BmBQwQ9vUTrLQJc6Lv6qEnTd4yVVF8pj9F1mj0I57x62tkqD
H9%2BbgaMxFrlN8CSJ65TgoTwh442bxjC2mDmEdVvjirq76gC6D6SLmWfvuUf0wP06twKI1bFodSWHJlvpfgPqnRu%2BLN%
2BrOZQBGuyMKO5dXFIg%3D%3D&ctx_handle=AU6BTBjL

Параметры ответа

Наименование Ограничение Назначение
retcode
Тип: ENUM
2 байт код возврата функции
deciphered_blob
Тип: BASE64
Соответствует размеру поданного на вход поля "data" часть расшифрованных данных

Пример ответа

deciphered_blob="eyJhY2Nlc3NfdG9rZW4iOiI0YTNlMzE3Zi01MGQ5LTQ0MjItOGQ4Yy0zZDliNDczMWFlOTktMSIsIn
Rva2VuX3R5cGUiOiJCZWFyZXIiLCJleHBpcmVzX2luIjozNjAwLCJyZWZyZXNoX3Rva2VuIjoiNDhhZDQwMzEtMjIxMC00M
TFlLTgxZWEtNzc0YTA2YjUyYTJmLTEiLCJpZF90b2tlbiI6ImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSm5iM04wTXpR
dU1UQXRNakF4TWlKOS5leUp6ZFdJaU9pSTNORFl5WkRKbVpEbGpaR1V6WmpNelltRXdOR1UxTkRjMk1EZG1aR0ZsWmpCak9
UTTROV1UxWWpNeE1XSmhNRGsyTVRZeU0yUXhZalpqTkRaaFl6VTNJaXdpWVhWa0lqb2lNakl6TXlJc0ltRmpjaUk2SW14dl
lTMHpJaXdpWVhwd0lqb2lNakl6TXlJc0ltRjFkR2hmZEdsdFpTSTZNVFU1TURRM016SXdNU3dpWVcxeUlqb2llM0IzWkN3Z
2JXTmhMQ0J0Wm1Fc0lHOTBjQ3dnYzIxemZTSXNJbWx6Y3lJNkltaDBkSEE2THk5elluUXRiMkZtY3kwMk16ZzZPVEE0TUM5
cFkyUnJJaXdpWlhod0lqb3hOVGt3TkRjek5UQXpMQ0pwWVhRaU9qRTFPVEEwTnpNeU1ETXNJbTV2Ym1ObElqb2lNemtpZlE
uVF9UdUoxWFlrTFRKWm5Sc2RPQlJXSmcwRk56enNhcWRIc0FLWTBiaWt5SkpYbmVneUZobklKZHBYWDdTbkJqVGpkT1oyam
ZCUHNILVhBVExRWTNqV3cifQ=="&retcode="1"

Пример декодированного (из BASE64URL) параметра ответа deciphered_blob

{
   "access_token":"4a3e317f-50d9-4422-8d8c-3d9b4731ae99-1",
   "token_type":"Bearer",
   "expires_in":3600,
   "refresh_token":"48ad4031-2210-411e-81ea-774a06b52a2f-1",
   "id_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJnb3N0MzQuMTAtMjAxMiJ9.eyJzdWIiOiI3NDYyZDJmZDljZGUzZjMzYmEwNGU1NDc2M
DdmZGFlZjBjOTM4NWU1YjMxMWJhMDk2MTYyM2QxYjZjNDZhYzU3IiwiYXVkIjoiMjIzMyIsImFjciI6ImxvYS0zIiwiYXpwIjoiMjIzMyIs
ImF1dGhfdGltZSI6MTU5MDQ3MzIwMSwiYW1yIjoie3B3ZCwgbWNhLCBtZmEsIG90cCwgc21zfSIsImlzcyI6Imh0dHA6Ly9zYnQtb2Fmcy0
2Mzg6OTA4MC9pY2RrIiwiZXhwIjoxNTkwNDczNTAzLCJpYXQiOjE1OTA0NzMyMDMsIm5vbmNlIjoiMzkifQ.T_TuJ1XYkLTJZnRsdOBRWJg
0FNzzsaqdHsAKY0bikyJJXnegyFhnIJdpXX7SnBjTjdOZ2jfBPsH-XATLQY3jWw"
}

Актуализация авторизационного токена

Ключ Refresh Token предназначен для получения нового Access Token и Refresh Token в случае компрометации или истечения времени жизни Access Token. Время жизни токена обмена 180 дней.

Модель запроса и ответа

Наименование Описание
grant_type Значение должно быть «refresh_token» (обязательный параметр)
client_id Банковский идентификатор сервиса полученный от менеджера при регистрации приложения (обязательный параметр )
client_secret Авторизационный ключ сервиса (обязательный параметр). Генерируется банком в момент заведения сервиса и передается оффлайн. После получения требуется, в обязательном порядке, сменить client_secret методом /v1/change-client-secret или в Личном кабинете SberBusinessAPI.
refresh_token Токен обмена (обязательный параметр)
scope Должен содержать обязательный параметр «openid» и через пробел перечисляются scope-ы доступных claim и сервисов, полученных от менеджера партнера при регистрации приложения (обязательный параметр при обращении к ресурсу)

Пример запроса

POST /ic/sso/api/v2/oauth/token
Host: edupirfintech.sberbank.ru:9443
grant_type=refresh_token
&refresh_token= 668c708e-865a-42b1-8fe9-846b92b8b14e-1
&client_id=1001
&client_secret=Ac03df04fff8

Пример ответа

Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
   "scope":"openid PAYROLL name",
   "access_token":"6e55338d-7a7a-4b66-bc78-248d52eeb1dc-1",
   "token_type":"Bearer",
   "expires_in":3600,
   "refresh_token":"668c708e-865a-42b1-8fe9-846b92b8b14e-1"
}

Рекомендуется обновлять ключи доступа (Access Token/Refresh Token) как минимум один раз за время жизни Refresh Token. В случае если Refresh Token потеряет актуальность (не будет обновлен до истечения времени жизни), сервис сможет получить актуальные ключи доступа только после повторной авторизации пользователя в сервисе через СББОЛ.

Если при обновлении ключей доступа по Refresh Token не был получен ответ из банка, то рекомендуется повторно отправить запрос на актуализацию ключей в течение 1 часа от момента отправки первой попытки, используя тот же Refresh Token. Успешное формирование ответа на стороне банка с новой парой ключей (Access Token/Refresh Token) переводит использованный раннее Refresh Token в статус резервного. Срок жизни резервного Refresh Token составляет 2 часа с момента выпуска новой пары ключей (Access Token/Refresh Token). Для последующих обновлений ключей доступа необходимо использовать Refresh Token из новой пары ключей (Access Token/Refresh Token).

Получение новой пары в зашифрованном виде

Для того, чтобы на запрос токена обновления получить ответ в зашифрованном виде необходимо в запросе передать http-заголовок Accept со значением application/jose, тогда сформированный не ошибочный ответ (код ответа 200) будет представлен в JOSE в представлении JWE Compact Serialization. При этом в ответе также будет содержаться http-заголовок Content-Type со значением application/jose.

JWE Compact Serialization состоит из 5 частей, разделитель между частями - символ '.'

В нашем случае структура JWE Compact Serialization будет иметь следующий вид: BASE64URL(UTF8(JWE Protected Header)) || '.' '.' '.' || BASE64URL(JWE Ciphertext) || '.'

Защищенный заголовок (Protected Header)  будет иметь следующий вид:

{
"typ": "JOSE",
"enc": "gost28147-89",
"kid": "UUID TLS-сертификата, который был использован при шифровании"
}

Параметр enc содержит алгоритм, по которому был зашифрован ответ, в нашем случае gost28147-89.

Пример JWE Compact Serialization

eyJ0eXAiOiJKT1NFIiwiZW5jIjoiZ29zdDI4MTQ3LTg5Iiwia2lkIjoiNzc4NkE0QkJCNTg4QjZBQTQ4MTEifQ...MIIHLA
YJKoZIhvcNAQcDoIIHHTCCBxkCAQCgggSfoIIEmzCCBJcwggRGoAMCAQICCneGpLu1iLaqSBEwCAYGKoUDAgIDMIIBEzELM
AkGA1UEBhMCUlUxLzAtBgNVBAoMJtCe0JDQniAi0KHQsdC10YDQsdCw0L3QuiDQoNC-0YHRgdC40LgiMU0wSwYDVQQLDETQ
o9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAg0KHQkSDQoNCkICjQotC10YHRgtC-0LLRi9C5KTE-MDw
GA1UEAww10JvQsNCy0YDQuNC90KHQki3QotC10YHRgtC-0LLQsNGPINC_0LXRh9Cw0YLRjC3Qo9CmLTkxITAfBgNVBCEMGN
Ci0LXRgdGC0LjRgNGD0Y7RidC40LkgUTEhMB8GCSqGSIb3DQEJARYSY2FzYnJmQHNiZXJiYW5rLnJ1MB4XDTE5MDkxMzA5M
TAwMFoXDTIyMDkxMzA5MTE0NlowggE0MS8wLQYDVQQDDCbQn9C10YLRgCDQn9C10YLRgNC-INCf0LXRgtGA0L7QstC40YfQ
qjERMA8GA1UEBAwI0J_QtdGC0YAxJjAkBgNVBCoMHdCf0LXRgtGA0L4g0J_QtdGC0YDQvtCy0LjRh9CqMQswCQYDVQQGEwJ
SVTFzMHEGA1UECgxq0J7QsdGJ0LXRgdGC0LLQviDRgSDQvtCz0YDQsNC90LjRh9C10L3QvdC-0Lkg0L7RgtCy0LXRgtGB0Y
LQstC10L3QvdC-0YHRgtGM0Y4gItCc0LDRiNCwINC4INCc0LXQtNCy0LXQtNGMIjEOMAwGA1UECwwFcWV3cWUxEjAQBgNVB
CEMCUJvb3Nzc3NzczEgMB4GCSqGSIb3DQEJARYRcXdlcXdlcUBtYXJycnIucnIwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAgYH
KoUDAgIeAQNDAARArVLHRJLdJl0SnsxGemCQ86Q8_9ZVBpV3KWRHLCLBXSWGGuqF5JoSBtWtNhbuA26bBRg2V7pPhQ0Rdc7
oIPa4DaOCAVMwggFPMGAGBSqFA2RvBFcMVdCh0YDQtdC00YHRgtCy0L4g0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C0LT
Qv9C40YHQuCAi0KDRg9GC0L7QutC10L0g0K3QptCfIDIuMCDQoCIwEwYDVR0gBAwwCjAIBgYqhQNkcQEwJgYHKoUDA3sDAQ
QbDBlBMDAyQVIyMHTQn9C10YLRgCDQny4g0J8uMBQGByqFAwN7AwQECQYHKoUDA3sFBDAOBgNVHQ8BAf8EBAMCBPAwFAYJY
IZIAYb4QgEBAQH_BAQDAgeAMBYGA1UdJQEB_wQMMAoGCCsGAQUFBwMCMBoGByqFAwN7AwUEDwwNVExTMDk4MjYwNzQzMDAd
BgNVHQ4EFgQU5rnb2j7CXqcq3qijl32MWcYW_4owHwYDVR0jBBgwFoAUm1I0EBH4CDR3jgrM1iYY3L4YOZwwCAYGKoUDAgI
DA0EAT_HWRP_z_gCdULkErGU064jF5vLjJNfJMXlRnczgxVV6upiaymDBhzLReusDu_GWhHN60R5nXFm198nL2FeJzTGB5D
CB4QIBAoAU5rnb2j7CXqcq3qijl32MWcYW_4owHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEgacwgaQwKAQgdwZVJ
svegalqQ77sq1SjVR6pCRM0Cgt8HZjEkLPYEEBH9zoqgeAYHKoUDAgIfAaBjMBwGBiqFAwICEzASBgcqhQMCAiMCBgcqhQM
CAh4BA0MABECS5OvuccLjdTdcOYimPuwSkUeIYWJo2DTO_k3SA2KqUSiCaTOvqMiilAB38PifHyaKUJes5L8ATBQVQI4k4c
dzBAg7W1ft3h_pvTCCAYgGCSqGSIb3DQEHATAdBgYqhQMCAhUwEwQIg62WM7xqUQsGByqFAwICHwGAggFaHd5avG4mj9ZTz
iRO1jOWw2GOWIm6DaznkGeczvl6AUBQpyDYu1UfDxYGPioViYAFurctxDNMIIOYtvrj0eCar0YLQ10hHWN11aXZHlJ-7uBz
Q3f4vX-vBhruThg0UjWU8A0qrf-BwzclWf92rLT9ycLhVRX_XQX22_Wh29MtK3GAAoiEG9QKivQgXMylN3Vv2TIlK0z6cmI
ApgaDY9pS7M_XzsvA2c1upbpIP3tZfaDaKpw1RlcbfpXkqRHjSuiYq4x8kv4uaN70Cnj2ny7jUVYKaDWz7zQ0To_TyqFPQk
fzTzdb4JIcGxMU27dF8vWtns3wW3BDsFvH_5kHMCzuWtuFZtKVhbwdwsZ6EzrvEnSB9epDcOXfaIvNkBCmtkLRuIW3gHYqt
8IcuyUrNOXwNGY7DK5Dkn4wrRYthkE7tnNYcYy9FIjHxW2Fcn5woJXbenR0yXlBmgLOQ.

Пример декодированного (из BASE64URL) Protected Header

{
   "typ":"JOSE",
   "enc":"gost28147-89",
   "kid":"7786A4BBB588B6AA4811"
}

Описание алгоритма расшифрования

Для того, чтобы расшифровать JWE Ciphertext необходимо выполнить следующие действия на VPNKeyTLS:

Проинициализировать устройство (INIT_DECIPHER_ID) путем передачи части с заголовком. Внести данные для расшифрования (DECIPHER_ID – 1 или более вызовов) и получить в ответ расшифрованные данные

Запросы необходимо отправлять на http://localhost:28016/vpnkeylocal//, где SID2-идентификатор сессии, получаемый после перехода в бизнес-систему.

Инициализация расшифрования

Модель запроса и ответа

Наименование Ограничение Назначение
id
Тип: ID_FORMAT
INIT_DECIPHER_ID id функции
head
Тип: BASE64
Для прошивок 399+: 2048 URL-encoded байтов base64;
Для прошивок 500+: 2048 байт бинарных данных (размер base64, требуемый для их кодировки, не регламентирован)
данные начала CMS в base64
obj_id
Тип: HANDLE
8 байт id сертификата для расшифрования
Дополнительно:
с версии 500 игнорируется
mode
Тип: ENUM
1, 2 Стандарт крипто операции: КС1 - токен только генерирует ключевую пару, данные шифруются "стартом.ехе"
КС2 - токен генерирует ключевую пару и шифрует данные.
Дополнительно:
Только нечётные версии 500+; Опционально; по умолчанию: 2.

Пример запроса

POST http://localhost:28016/vpnkeylocal/iJbnPrTXFHOd85ZxdKQyrqGV9cOe11WmCY/
POST data:
id=INIT_DECIPHER_ID&head=MIIHLAYJKoZIhvcNAQcDoIIHHTCCBxkCAQCgggSfoIIEmzCCBJcwggRGoAMCAQICCneGpL
u1iLaqSBEwCAYGKoUDAgIDMIIBEzELMAkGA1UEBhMCUlUxLzAtBgNVBAoMJtCe0JDQniAi0KHQsdC10YDQsdCw0L3QuiDQo
NC%2B0YHRgdC40LgiMU0wSwYDVQQLDETQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAg0KHQkSDQoN
CkICjQotC10YHRgtC%2B0LLRi9C5KTE%2BMDwGA1UEAww10JvQsNCy0YDQuNC90KHQki3QotC10YHRgtC%2B0LLQsNGPINC
%2F0LXRh9Cw0YLRjC3Qo9CmLTkxITAfBgNVBCEMGNCi0LXRgdGC0LjRgNGD0Y7RidC40LkgUTEhMB8GCSqGSIb3DQEJARYS
Y2FzYnJmQHNiZXJiYW5rLnJ1MB4XDTE5MDkxMzA5MTAwMFoXDTIyMDkxMzA5MTE0NlowggE0MS8wLQYDVQQDDCbQn9C10YL
RgCDQn9C10YLRgNC%2BINCf0LXRgtGA0L7QstC40YfQqjERMA8GA1UEBAwI0J%2FQtdGC0YAxJjAkBgNVBCoMHdCf0LXRgt
GA0L4g0J%2FQtdGC0YDQvtCy0LjRh9CqMQswCQYDVQQGEwJSVTFzMHEGA1UECgxq0J7QsdGJ0LXRgdGC0LLQviDRgSDQvtC
z0YDQsNC90LjRh9C10L3QvdC%2B0Lkg0L7RgtCy0LXRgtGB0YLQstC10L3QvdC%2B0YHRgtGM0Y4gItCc0LDRiNCwINC4IN
Cc0LXQtNCy0LXQtNGMIjEOMAwGA1UECwwFcWV3cWUxEjAQBgNVBCEMCUJvb3Nzc3NzczEgMB4GCSqGSIb3DQEJARYRcXdlc
XdlcUBtYXJycnIucnIwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAgYHKoUDAgIeAQNDAARArVLHRJLdJl0SnsxGemCQ86Q8%2F9
ZVBpV3KWRHLCLBXSWGGuqF5JoSBtWtNhbuA26bBRg2V7pPhQ0Rdc7oIPa4DaOCAVMwggFPMGAGBSqFA2RvBFcMVdCh0YDQt
dC00YHRgtCy0L4g0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C%2B0LTQv9C40YHQuCAi0KDRg9GC0L7QutC10L0g0K3Qpt
CfIDIuMCDQoCIwEwYDVR0gBAwwCjAIBgYqhQNkcQEwJgYHKoUDA3sDAQQbDBlBMDAyQVIyMHTQn9C10YLRgCDQny4g0J8uM
BQGByqFAwN7AwQECQYHKoUDA3sFBDAOBgNVHQ8BAf8EBAMCBPAwFAYJYIZIAYb4QgEBAQH%2FBAQDAgeAMBYGA1UdJQEB%2
FwQMMAoGCCsGAQUFBwMCMBoGByqFAwN7AwUEDwwNVExTMDk4MjYwNzQzMDAdBgNVHQ4EFgQU5rnb2j7CXqcq3qijl32MWcY
W%2F4owHwYDVR0jBBgwFoAUm1I0EBH4CDR3jgrM1iYY3L4YOZwwCAYGKoUDAgIDA0EAT%2FHWRP%2Fz%2FgCdULkErGU064
jF5vLjJNfJMXlRnczgxVV6upiaymDBhzLReusDu%2FGWhHN60R5nXFm198nL2FeJzTGB5DCB4QIBAoAU5rnb2j7CXqcq3qi
jl32MWcYW%2F4owHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEgacwgaQwKAQgdwZVJsvegalqQ77sq1S%2BjVR6pC
RM0Cgt8HZ%2BjEkLPYEEBH9zoq%2BgeAYHKoUDAgIfAaBjMBwGBiqFAwICEzASBgcqhQMCAiMCBgcqhQMCAh4BA0MABECS5
OvuccLjdTdcOYimPuwSkUeIYWJo2DTO%2Fk3SA2KqUSiCaTOvqMiilAB38PifHyaKUJes5L8ATBQVQI4k4cdzBAg7W1ft3h
%2FpvTCCAYgGCSqGSIb3DQEHATAdBgYqhQMCAhUwEwQIg62WM7xqUQsGByqFAwICHwGAggFaHd5avG4mj9ZTziRO1jOWw2G
OWIm6DaznkGeczvl6AUBQpyDYu1UfDxYGPioViYAFurctxDNMIIOYtvrj0eCar0YLQ10hHWN11aXZHlJ%2B7uBzQ3f4vX%2
BvBhruThg0UjWU8A0qrf%2BBwzclWf92rLT9ycLhVRX%2FXQX22%2FWh29MtK3GAAoiEG9QKivQgXMylN3Vv2TIlK0z6cmI
ApgaDY9pS7M%2FXzsvA2c1upbpIP3tZfaDaKpw1RlcbfpXkqRHjSuiYq4x8kv4uaN70Cnj2ny7jUVYKaDWz7zQ0To%2F%2B
TyqFPQkfzTzdb4JIcGxMU27dF8vWtns3wW3BDsFvH%2F5kHMCzuWtuFZtKVhbwdwsZ6EzrvEnSB9epDcOXfaIvNkBCmtkLR
uIW3gHYqt8IcuyUrNOXwNGY7DK5Dkn4wrRYthkE7tnNYcYy9FIjHxW2Fcn5woJXbenR0yXlBmgLOQ%3D%3D&mode=1

Параметры ответа

Наименование Ограничение Назначение
retcode
Тип: ENUM
2 байт код возврата функции
ctx_handle
Тип: HANDLE
8 байт хендл контекста операции
body_displ
Тип: NUMBER
2^32 - 1 размер (смещение) начала CMS в чистом виде (до кодирования base64)

Пример ответа

ctx_handle="Zp6LrtRE"&body_displ="0"&retcode="1"

Расшифрование данных

Параметры запроса Ограничение Назначение
id
Тип: ID_FORMAT
DECIPHER_ID id функции
data
Тип: BASE64
Для прошивок 399+: 6144 URL-encoded байтов base64;
Для прошивок 500+ чётных версий и нечётных ранее 507:
для режима КС1: 15360 байтов бинарных данных;
для режима КС2: 16777216 байтов бинарных данных;
для нечётных 507 и выше: 2^64 - 1 байтов бинарных данных;
(размер base64, требуемый для их кодировки, не ограничен)
данные для расшифрования в base64;
размер декодированных данных должен быть кратным 8, начиная с размера (смещения) начала CMS в чистом виде (до кодирования base64)
ctx_handle
Тип: HANDLE
8 байт хендл контекста операции

Пример запроса

POST http://localhost:28016/vpnkeylocal/iJbnPrTXFHOd85ZxdKQyrqGV9cOe11WmCY/
POST data:
id=DECIPHER_ID&data=MIIHLAYJKoZIhvcNAQcDoIIHHTCCBxkCAQCgggSfoIIEmzCCBJcwggRGoAMCAQICCneGpLu1iLa
qSBEwCAYGKoUDAgIDMIIBEzELMAkGA1UEBhMCUlUxLzAtBgNVBAoMJtCe0JDQniAi0KHQsdC10YDQsdCw0L3QuiDQoNC%2B
0YHRgdC40LgiMU0wSwYDVQQLDETQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAg0KHQkSDQoNCkICj
QotC10YHRgtC%2B0LLRi9C5KTE%2BMDwGA1UEAww10JvQsNCy0YDQuNC90KHQki3QotC10YHRgtC%2B0LLQsNGPINC%2F0L
XRh9Cw0YLRjC3Qo9CmLTkxITAfBgNVBCEMGNCi0LXRgdGC0LjRgNGD0Y7RidC40LkgUTEhMB8GCSqGSIb3DQEJARYSY2FzY
nJmQHNiZXJiYW5rLnJ1MB4XDTE5MDkxMzA5MTAwMFoXDTIyMDkxMzA5MTE0NlowggE0MS8wLQYDVQQDDCbQn9C10YLRgCDQ
n9C10YLRgNC%2BINCf0LXRgtGA0L7QstC40YfQqjERMA8GA1UEBAwI0J%2FQtdGC0YAxJjAkBgNVBCoMHdCf0LXRgtGA0L4
g0J%2FQtdGC0YDQvtCy0LjRh9CqMQswCQYDVQQGEwJSVTFzMHEGA1UECgxq0J7QsdGJ0LXRgdGC0LLQviDRgSDQvtCz0YDQ
sNC90LjRh9C10L3QvdC%2B0Lkg0L7RgtCy0LXRgtGB0YLQstC10L3QvdC%2B0YHRgtGM0Y4gItCc0LDRiNCwINC4INCc0LX
QtNCy0LXQtNGMIjEOMAwGA1UECwwFcWV3cWUxEjAQBgNVBCEMCUJvb3Nzc3NzczEgMB4GCSqGSIb3DQEJARYRcXdlcXdlcU
BtYXJycnIucnIwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAgYHKoUDAgIeAQNDAARArVLHRJLdJl0SnsxGemCQ86Q8%2F9ZVBpV
3KWRHLCLBXSWGGuqF5JoSBtWtNhbuA26bBRg2V7pPhQ0Rdc7oIPa4DaOCAVMwggFPMGAGBSqFA2RvBFcMVdCh0YDQtdC00Y
HRgtCy0L4g0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C%2B0LTQv9C40YHQuCAi0KDRg9GC0L7QutC10L0g0K3QptCfIDI
uMCDQoCIwEwYDVR0gBAwwCjAIBgYqhQNkcQEwJgYHKoUDA3sDAQQbDBlBMDAyQVIyMHTQn9C10YLRgCDQny4g0J8uMBQGBy
qFAwN7AwQECQYHKoUDA3sFBDAOBgNVHQ8BAf8EBAMCBPAwFAYJYIZIAYb4QgEBAQH%2FBAQDAgeAMBYGA1UdJQEB%2FwQMMA
oGCCsGAQUFBwMCMBoGByqFAwN7AwUEDwwNVExTMDk4MjYwNzQzMDAdBgNVHQ4EFgQU5rnb2j7CXqcq3qijl32MWcYW%2F4ow
HwYDVR0jBBgwFoAUm1I0EBH4CDR3jgrM1iYY3L4YOZwwCAYGKoUDAgIDA0EAT%2FHWRP%2Fz%2FgCdULkErGU064jF5vLjJN
fJMXlRnczgxVV6upiaymDBhzLReusDu%2FGWhHN60R5nXFm198nL2FeJzTGB5DCB4QIBAoAU5rnb2j7CXqcq3qijl32MWcYW
%2F4owHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEgacwgaQwKAQgdwZVJsvegalqQ77sq1S%2BjVR6pCRM0Cgt8HZ%
2BjEkLPYEEBH9zoq%2BgeAYHKoUDAgIfAaBjMBwGBiqFAwICEzASBgcqhQMCAiMCBgcqhQMCAh4BA0MABECS5OvuccLjdTdc
OYimPuwSkUeIYWJo2DTO%2Fk3SA2KqUSiCaTOvqMiilAB38PifHyaKUJes5L8ATBQVQI4k4cdzBAg7W1ft3h%2FpvTCCAYgG
CSqGSIb3DQEHATAdBgYqhQMCAhUwEwQIg62WM7xqUQsGByqFAwICHwGAggFaHd5avG4mj9ZTziRO1jOWw2GOWIm6DaznkGec
zvl6AUBQpyDYu1UfDxYGPioViYAFurctxDNMIIOYtvrj0eCar0YLQ10hHWN11aXZHlJ%2B7uBzQ3f4vX%2BvBhruThg0UjWU
8A0qrf%2BBwzclWf92rLT9ycLhVRX%2FXQX22%2FWh29MtK3GAAoiEG9QKivQgXMylN3Vv2TIlK0z6cmIApgaDY9pS7M%2FX
zsvA2c1upbpIP3tZfaDaKpw1RlcbfpXkqRHjSuiYq4x8kv4uaN70Cnj2ny7jUVYKaDWz7zQ0To%2F%2BTyqFPQkfzTzdb4JI
cGxMU27dF8vWtns3wW3BDsFvH%2F5kHMCzuWtuFZtKVhbwdwsZ6EzrvEnSB9epDcOXfaIvNkBCmtkLRuIW3gHYqt8IcuyUrN
OXwNGY7DK5Dkn4wrRYthkE7tnNYcYy9FIjHxW2Fcn5woJXbenR0yXlBmgLOQ%3D%3D&ctx_handle=Zp6LrtRE

Параметры ответа

Наименование Ограничение
retcode
Тип: ENUM
2 байт
deciphered_blob
Тип: BASE64
Соответствует размеру поданного на вход поля "data"

Пример ответа

deciphered_blob="ImV5SjBlWEFpT2lKS1QxTkZJaXdpWVd4bklqb2laMjl6ZERNMExqRXdMVEl3TVRJaWZRLmV5SmhZMk
5sYzNOZmRHOXJaVzRpT2lJellUTmlOakkxTVMxbFlURmxMVFJoTXpNdE9HRTBaUzAxTmpSaU9UazVPRGMyTXpRdE1TSXNJb
lJ2YTJWdVgzUjVjR1VpT2lKQ1pXRnlaWElpTENKbGVIQnBjbVZ6WDJsdUlqb3pOakF3TENKeVpXWnlaWE5vWDNSdmEyVnVJ
am9pTlROaE5EYzBOMk10WkdJd1ppMDBaalF5TFRoaFpHRXRNRFpqWkRVd1lXVmhNVFkzTFRFaWZRLk9tbjF3d0JKVEZXWXl
XeXFVVWNBSDVWRnNEVjV0b1JQYnpPVVBhdHBfQUItLWpLaFRxdVE2eUpoNXhHNWJSRDQ2WWxRdmFzMW9RalNyc0VYSkJSSX
B3Ig=="&retcode="1"

После декодирования из BASE64URL параметра ответа deciphered_blob получаем ответ в виде JOSE в представлении JWS Compact Serialization

JWS Compact Serialization состоит из 3 частей, разделитель между частями - символ '.'

В нашем случае структура JWS Compact Serialization будет иметь следующий вид: BASE64URL(Header) || '.' || BASE64URL(Payload) || '.' || BASE64URL(Signature)

Пример декодированного (из BASE64URL) параметра ответа deciphered_blob → JWS Compact Serialization

eyJ0eXAiOiJKT1NFIiwiYWxnIjoiZ29zdDM0LjEwLTIwMTIifQ.eyJhY2Nlc3NfdG9rZW4iOiIzYTNiNjI1MS1lYTFlLTRh
MzMtOGE0ZS01NjRiOTk5ODc2MzQtMSIsInRva2VuX3R5cGUiOiJCZWFyZXIiLCJleHBpcmVzX2luIjozNjAwLCJyZWZyZXN
oX3Rva2VuIjoiNTNhNDc0N2MtZGIwZi00ZjQyLThhZGEtMDZjZDUwYWVhMTY3LTEifQ.Omn1wwBJTFWYyWyqUUcAH5VFsDV
5toRPbzOUPatp_AB--jKhTquQ6yJh5xG5bRD46YlQvas1oQjSrsEXJBRIpw

Пример декодированного (из BASE64URL) Header

{
   "typ":"JOSE",
   "alg":"gost34.10-2012"
}

Пример декодированного (из BASE64URL) Payload

{
   "access_token":"3a3b6251-ea1e-4a33-8a4e-564b99987634-1",
   "token_type":"Bearer",
   "expires_in":3600,
   "refresh_token":"53a4747c-db0f-4f42-8ada-06cd50aea167-1"
}

Ресурс /v1/oauth/user-info

Ресурс позволяет Партнеру получать данные о подключенном клиенте (если клиент «разрешил» Партнеру доступ к своим данным), которые могут включать в себя информацию об организации пользователя, например:

  • идентификатор клиента (hashOrgId);

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

Шаги

1. Определить переход клиента по ссылке (опционально).

2. Получить код авторизации.

3. Получить токен авторизации.

4. Отправить запрос.

5. Получить информацию в зашифрованном виде (опционально)

Запрос User Info должен производиться методом GET с использованием заголовка Authorization и передаваемых в нем значения Bearer (всегда должно соответствовать ответу в параметре token_type=) и значения из access_token. При запросе Партнером информации о пользователе своей организации не заполняется claim accounts

Параметры запроса и ответа

Наименование Описание
Authorization (String) Access token полученный через SSO
Пример: Bearer daf9a14c-821d-4bde-9c10-0e56e63d54a0-1

Пример запроса

GET/ic/sso/api/v1/oauth/user-info HTTP/1.1
Host: edupirfintech.sberbank.ru:9443
Authorization: Bearer CD6A56FD-A9C7-4152-AA1D-FA57E550F6AC-2

Каждая часть ответа, разделенная точкой, должна декодироваться отдельно.

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/jwt
eyJ0eXAiOiJKV1QiLCJhbGciOiJnb3N0MzQuMTAtMjAxMiJ9.eyJzdWIiOiJkOTI0M2I4NTI2ND
Q5OTZiNjNlNWMyN2Y0ZmI5NTBjMzAyNGIzZGRkZjVjZWFmZmY4MDVlZjhiZmNlNzQwYTJl
IiwiZWtzRXBrSWQiOjAsImlzcyI6Imh0dHA6Ly9zYnQtb2Fmcy02Mzg6OTA4MC9pY2RrIiwiT3
JnTmFtZSI6ItCe0J7QniBcItCf0J7QndCi0JjQpFwiIiwib3JnSWQiOjIyODMzODksImluZGl2aWR
1YWxFeGVjdXRpdmVBZ2VuY3kiOjAsInVzZXJTaWduYXR1cmVUeXBlIjoi0JXQtNC40L3RgdG
C0LLQtdC90L3QsNGPINC_0L7QtNC_0LjRgdGMIiwic3VtbU9mZmVyU21hcnRDcmVkaXQiOj
AsIkhhc2hPcmdJZCI6ImMxOTQ0YTNmOGIzMTMwMjc3MjExZmEyZTZjNmY5YjcyNDdlZTk4
NjU1ZjIyZTRlYjAzNWRiNzk2NjAzODJmOGEiLCJpc0lkZW50aWZpZWQiOmZhbHNlLCJub25
DbGllbnQiOmZhbHNlLCJ1c2VyUG9zaXRpb24iOiIyMjIiLCJkYm9Db250cmFjdHMiOlt7Im51bW
JlciI6IjIyNzM0OTI1MSIsImRhdGUiOiIyMDIwLTA3LTAyIiwiZmluYW5jZUJsb2NrIjpmYWxzZX1dL
CJyZXNpZGVudCI6dHJ1ZSwib2ZmZXJFeHBpcmF0aW9uRGF0ZSI6IjIwMjEtMDktMDZUMTM
6MzY6MzYrMDMwMCIsIm9yZ0d1aWQiOiI5ZTE0MjA2My0xYWFiLTRhNmUtYjkyZS0yZDUxZT
kyNjQ0N2MiLCJpbm4iOiI3NzM1MDkxMjIyIiwib3JnSnVyaWRpY2FsQWRkcmVzcyI6ItCg0J7Qo
dCh0JjQmdCh0JrQkNCvINCk0JXQlNCV0KDQkNCm0JjQrywgMTIzNDU2LCDQsy7QnNC-0Y
HQutCy0LAsINCc0L7RgdC60L7QstGB0LrQuNC5INGALdC-0L0sINGD0LsuINCi0LXRgdGC0L
7QstCw0Y8gMTAxOTgzLCDQtNC-0LwgMSwg0YHRgtGALiAyIiwiYWN0aXZlIjoxLCJvcmdGdW
xsTmFtZSI6ItCe0LHRidC10YHRgtCy0L4g0YEg0L7Qs9GA0LDQvdC40YfQtdC90L3QvtC5INC-
0YLQstC10YLRgdGC0LLQtdC90L3QvtGB0YLRjNGOIiwidGJJZGVudENvZGUiOiIzOCIsInVzZXJ
HdWlkIjoiOTlkNjY0N2YtYjI0Yi00ODg3LTg2NDgtZjViOTBjZmQ1MTc2IiwidXNlcklkIjoxNjYxMTA5
LCJ0ZXJCYW5rIjoi0JzQvtGB0LrQvtCy0YHQutC40Lkg0JHQsNC90Log0KHQsdC10YDQsdCw
0L3QutCwINCg0KQiLCJvcmdVbmNvbmZpcm1lZCI6ZmFsc2UsImF1ZCI6Ijc2NzA0IiwidXNlclJv
bGVzIjpbImJhbmtDbGllbnQiXSwidXNlckNyeXB0b1R5cGUiOiJTTVMiLCJ1c2VyR3JvdXBzIjoi0K
DRg9C60L7QstC-0LTQuNGC0LXQu9GMIiwic2Jib2wzIjp0cnVlLCJvZmZlclNtYXJ0Q3JlZGl0Ijp
mYWxzZSwibmFtZSI6ItCf0L7QvdGC0LjRhNC-0LIg0KfQtdGC0YvRgNC1INCf0L7QvdGC0LjRhNC-
0LLQuNGHIiwiaW5xdWlyeU9yZGVyIjp0cnVlLCJwaG9uZV9udW1iZXIiOiI3OTY0NTYxNjU1NiIsImFj
Y291bnRzIjpbeyJjb3JyQWNjb3VudE51bWJlciI6IjMwMTAxODEwNDAwMDAwMDAwMjI1IiwiYWNjb3
VudE51bWJlciI6IjQwNzAyODEwMTU0OTg0NjUxNTk2IiwiYmljIjoiMDQ0NTI1MjI1In0seyJjb3JyQWNj
b3VudE51bWJlciI6IjMwMTAxODEwNDAwMDAwMDAwMjI1IiwiYWNjb3VudE51bWJlciI6IjQwNzAyOD
EwNTM4MDAwMDAxMDk5IiwiYmljIjoiMDQ0NTI1MjI1In0seyJjb3JyQWNjb3VudE51bWJlciI6IjMwMT
AxODEwNDAwMDAwMDAwMjI1IiwiYWNjb3VudE51bWJlciI6IjQwNzAyODEwODc4OTQ2NTQ4OTQ5
IiwiYmljIjoiMDQ0NTI1MjI1In0seyJjb3JyQWNjb3VudE51bWJlciI6IjMwMTAxODEwNDAwMDAwMDAw
MjI1IiwiYWNjb3VudE51bWJlciI6IjQyMTAxODEwNzQ3NDg5NDU2MjE1IiwiYmljIjoiMDQ0NTI1MjI1In1dfQ.
GO59WE1mtVcz0XYkwh0IhIZWVoABoAcWAyI5SxGLhwZxUK0uImRzYCuP9kdx8Br5lqgLjWN7xiAd9txncI-7Rg

Пример декодированного ответа

{
   "typ":"JWT",
   "alg":"gost34.10-2012"
}
{
   "sub":"d9243b852644996b63e5c27f4fb950c3024b3dddf5ceafff805ef8bfce740a2e",
   "eksEpkId":0,
   "iss":"http://edupirfintech.sberbank.ru:9443",
   "OrgName":"ООО \"ПОНТИФ\"",
   "orgId":2283389,
   "individualExecutiveAgency":0,
   "userSignatureType":"Единственная подпись",
   "summOfferSmartCredit":0,
   "HashOrgId":"c1944a3f8b3130277211fa2e6c6f9b7247ee98655f22e4eb035db79660382f8a",
   "isIdentified":false,
   "nonClient":false,
   "userPosition":"222",
   "dboContracts":[
      {
         "number":"227349251",
         "date":"2020-07-02",
         "financeBlock":false
      }
   ],
   "resident":true,
   "offerExpirationDate":"2021-09-06T13:36:36+0300",
   "orgGuid":"9e142063-1aab-4a6e-b92e-2d51e926447c",
   "inn":"7735091222",
   "orgJuridicalAddress":"РОССИЙСКАЯ ФЕДЕРАЦИЯ, 123456, г.Москва, Московскийр-он, ул. Тестовая 101983, дом 1, стр. 2",
   "active":1,
   "orgFullName":"Общество с ограниченной ответственностью",
   "tbIdentCode":"38",
   "userGuid":"99d6647f-b24b-4887-8648-f5b90cfd5176",
   "userId":1661109,
   "terBank":"Московский Банк Сбербанка РФ",
   "orgUnconfirmed":false,
   "aud":"76704",
   "userRoles":[
      "bankClient"
   ],
   "userCryptoType":"SMS",
   "userGroups":"Руководитель",
   "sbbol3":true,
   "offerSmartCredit":false,
   "name":"Понтифов Четыре Понтифович",
   "inquiryOrder":true,
   "phone_number":"79645616556",
   "accounts":[
      {
         "corrAccountNumber":"30101810400000000225",
         "accountNumber":"40702810154984651596",
         "bic":"044525225"
      },
      {
         "corrAccountNumber":"30101810400000000225",
         "accountNumber":"40702810538000001099",
         "bic":"044525225"
      },
      {
         "corrAccountNumber":"30101810400000000225",
         "accountNumber":"40702810878946548949",
         "bic":"044525225"
      },
      {
         "corrAccountNumber":"30101810400000000225",
         "accountNumber":"42101810747489456215",
         "bic":"044525225"
      }
   ]
}

Структура User-info

Согласно спецификации JSON Web Token (JWT) User Info должен быть представлен структурой вида:

  • Алгоритм подписи (Определяется по сертификату технологического криптопрофиля Банка, который можно получить запросом /crypto), Header (Заголовок);
  • User-info, Payload (Полезная нагрузка);
  • Электронная подпись.

При получении ответа сервис партнера должен его декодировать и опционально проверить электронную подпись ответа. Система отправит ответ HTTP 200 OK с типом данных jwt. User-info необходимо декодировать c помощью алгоритма base64url Encoding (по спецификации JWT). Преобразование BASE64URL, отличается от BASE64. Условно алгоритм можно представить следующим образом: Base64Url(x) := Base64(x).Split(‘=’)[0].Replace(‘+’, ’-’).Replace(‘/’, ’_’). Здесь функция Split(x), разбивает строку на части ([i] означает взятие i–ой части), используя символ разделитель x, функция Replace(x,y) заменяет все вхождения символа x на символ y. В user-info включаются обязательные системные и дополнительные атрибуты пользователя для сервиса. Обязательные системные атрибуты: sub, iss, aud. Проверка электронной подписи (3-я часть ответа) является опциональной и может выполняться сервисом при необходимости проверки неизменности данных user-info.

Список доступных параметров User-info

Наименование Описание
sid2 Идентификатор сессии токена
sub Хэш идентификатора пользователя
iss URL СББОЛ
aud Идентификатор внешнего сервиса
name Фамилия Имя Отчество
inn ИНН организации
email Адрес электронной почты
phone_number Номер телефона
HashOrgId Хэш от идентификатор организации (orgId)
orgId Идентификатор организации в СББОЛ
orgKpp КПП
orgFullName Название компании
OrgName Наименование организации
orgOgrn ОГРН компании
orgOkpo ОКПО организации
orgOktmo Общероссийский классификатор территорий муниципальных образований
orgActualAddress Фактический адрес компании
orgJuridicalAddress Юридический адрес компании
accounts Счет, БИК, Кор. счет компании. Примечание: не заполняется при запросе Партнером информации о пользователе своей организации.
terBank Полное наименование подразделения кредитной организации
offerExpirationDate Дата окончания оферты
userPosition Должность
userRoles Список роли пользователя
userSignatureType Тип подписи
userGuid Идентификатор пользователя клиента, который обратился к сервису
userId Внутренний идентификатор пользователя
userGroups Группы пользователя
sbbol3 Признак использования клиентом нового дизайна СББОЛ 3.0
userCryptoType Тип криптопрофиля
tbIdentCode Код территориального банка
individualExecutiveAgency Признак Единоличный Исполнительный Орган
inquiryOrder Признак доступности у пользователя функциональности получения справок
isIdentified Признак идентификации пользователя
offerSmartCredit Предодобренные предложения по смарт кредитам
summOfferSmartCredit Сумма предодобренного предложения по смарт-кредитам
resident Признак является организация резидент/нерезидент
orgBusinessSegment Бизнес сегмент. Возможные значения:
02-Микро бизнес (микро),
03-Малый бизнес,
04-Средний бизнес,
05-Крупный бизнес,
06-Крупнейший бизнес,
07-Клиенты машиностроения (ОПК),
08-Рег. госсектор,
09-БМО,
10-Фин. институты,
999-Не найдено сегмента в CRM Корпоративном.
buyOnCreditMmb Признак возможности покупки в кредит на сайте партнера
orgLawFormShort Организационно-правовая форма (принятое сокращение)
isСorpCardHolder Наличие у клиента активной бизнес-карты
creditLineAvailableSum Сумма остатка действующей кредитной линии
hasActiveCreditLine Наличие активной кредитной линии у клиента

Получение информации в зашифрованном виде

При запросе информации о клиенте получаем сформированный не ошибочный ответ (код ответа 200) будет представлен в JOSE в представлении JWE Compact Serialization. При этом в ответе также будет содержаться http-заголовок Content-Type со значением application/jwt.

JWE Compact Serialization состоит из 5 частей, разделитель между частями - символ '.'

В нашем случае структура JWE Compact Serialization будет иметь следующий вид: BASE64URL(UTF8(JWE Protected Header)) || '.' '.' '.' || BASE64URL(JWE Ciphertext) || '.'

Защищенный заголовок (Protected Header)  будет иметь следующий вид:

{
   "typ":"JWT",
   "cty":"JWT",
   "enc":"gost28147-89",
   "kid":"UUID TLS-сертификата, который был использован при шифровании"
}

Параметр enc содержит алгоритм, по которому был зашифрован ответ, в нашем случае gost28147-89. Параметр cty содержит тип содержимого, в нашем случае JWT.

Пример JWE Compact Serialization

eyJ0eXAiOiJKV1QiLCJjdHkiOiJKV1QiLCJlbmMiOiJnb3N0MjgxNDctODkiLCJraWQiOiI3Nzg2QTRCQkI1ODhCNkFBNDg
xMSJ9...MIIHkAYJKoZIhvcNAQcDoIIHgTCCB30CAQCgggSfoIIEmzCCBJcwggRGoAMCAQICCneGpLu1iLaqSBEwCAYGKoU
DAgIDMIIBEzELMAkGA1UEBhMCUlUxLzAtBgNVBAoMJtCe0JDQniAi0KHQsdC10YDQsdCw0L3QuiDQoNC-0YHRgdC40LgiMU
0wSwYDVQQLDETQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAg0KHQkSDQoNCkICjQotC10YHRgtC-0
LLRi9C5KTE-MDwGA1UEAww10JvQsNCy0YDQuNC90KHQki3QotC10YHRgtC-0LLQsNGPINC_0LXRh9Cw0YLRjC3Qo9CmLTkx
ITAfBgNVBCEMGNCi0LXRgdGC0LjRgNGD0Y7RidC40LkgUTEhMB8GCSqGSIb3DQEJARYSY2FzYnJmQHNiZXJiYW5rLnJ1MB4
XDTE5MDkxMzA5MTAwMFoXDTIyMDkxMzA5MTE0NlowggE0MS8wLQYDVQQDDCbQn9C10YLRgCDQn9C10YLRgNC-INCf0LXRgt
GA0L7QstC40YfQqjERMA8GA1UEBAwI0J_QtdGC0YAxJjAkBgNVBCoMHdCf0LXRgtGA0L4g0J_QtdGC0YDQvtCy0LjRh9CqM
QswCQYDVQQGEwJSVTFzMHEGA1UECgxq0J7QsdGJ0LXRgdGC0LLQviDRgSDQvtCz0YDQsNC90LjRh9C10L3QvdC-0Lkg0L7R
gtCy0LXRgtGB0YLQstC10L3QvdC-0YHRgtGM0Y4gItCc0LDRiNCwINC4INCc0LXQtNCy0LXQtNGMIjEOMAwGA1UECwwFcWV
3cWUxEjAQBgNVBCEMCUJvb3Nzc3NzczEgMB4GCSqGSIb3DQEJARYRcXdlcXdlcUBtYXJycnIucnIwYzAcBgYqhQMCAhMwEg
YHKoUDAgIjAgYHKoUDAgIeAQNDAARArVLHRJLdJl0SnsxGemCQ86Q8_9ZVBpV3KWRHLCLBXSWGGuqF5JoSBtWtNhbuA26bB
Rg2V7pPhQ0Rdc7oIPa4DaOCAVMwggFPMGAGBSqFA2RvBFcMVdCh0YDQtdC00YHRgtCy0L4g0Y3Qu9C10LrRgtGA0L7QvdC9
0L7QuSDQv9C0LTQv9C40YHQuCAi0KDRg9GC0L7QutC10L0g0K3QptCfIDIuMCDQoCIwEwYDVR0gBAwwCjAIBgYqhQNkcQEw
JgYHKoUDA3sDAQQbDBlBMDAyQVIyMHTQn9C10YLRgCDQny4g0J8uMBQGByqFAwN7AwQECQYHKoUDA3sFBDAOBgNVHQ8BAf8
EBAMCBPAwFAYJYIZIAYb4QgEBAQH_BAQDAgeAMBYGA1UdJQEB_wQMMAoGCCsGAQUFBwMCMBoGByqFAwN7AwUEDwwNVExTMD
k4MjYwNzQzMDAdBgNVHQ4EFgQU5rnb2j7CXqcq3qijl32MWcYW_4owHwYDVR0jBBgwFoAUm1I0EBH4CDR3jgrM1iYY3L4YO
ZwwCAYGKoUDAgIDA0EAT_HWRP_z_gCdULkErGU064jF5vLjJNfJMXlRnczgxVV6upiaymDBhzLReusDu_GWhHN60R5nXFm1
98nL2FeJzTGB5DCB4QIBAoAU5rnb2j7CXqcq3qijl32MWcYW_4owHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEgac
wgaQwKAQgCWiPsNUPtqNkZexMTh6vT9ZSGU7SvYpK3_NfssGYmx0EBJT5Hy6geAYHKoUDAgIfAaBjMBwGBiqFAwICEzASBg
cqhQMCAiMCBgcqhQMCAh4BA0MABEAhPN-tmOaBsODWae-4VafeIxU0DbMh2Wq8GUly7IyyMyPZWBJF1qiAPmLAy1KW8rnud
8LhGk5uSK_sFN5XKl8UBAgRpMHXsWF1DzCCAewGCSqGSIb3DQEHATAdBgYqhQMCAhUwEwQIrpJ7hnKfDJ8GByqFAwICHwGA
ggG-T5WjPgiN6zfNjsRa823bljaSl93B4qmOD06RKtGwSsnpunrV0yF_6sWs7_SoSFCb3urrjy3JPNSmL_7TueqEWquIGkO
dg73uALFUCH5dq7ZiBzJ_FeuJBBAIOeNyNxSeu1S7gLxiGYn3rYNp13yCaumOEuo23fYBWC_9KSmB3ZQMJEYkUoJJJQ2fCs
V3EXXLlkENCDcbNKSKe2Mv6ZJT02wea0X0PjaG7DlbK5TMFoE69Exs6oEdjAet5o3sWumGzb_pOEQwIg5mS4rBqUc3WLtpP
laozpOwtEAfJyu9mP0hBGh4z1uWAHlXkV5b5L1aZyBOXvLAwTtgdbQ7kwYa0ffN00Dr4uHDqojq8THM9NMKyU6yK_nxE61X
znGOj3aC-vF5RRrUNr50Xbl-mddwzDUJyQJoOIAzYUoA5kSb8sIyOH62HgqauuQhbdTd4sITjOZDeAPQXsRWOiiV__vjGlR
Eoiei3M5XxSufFdPAylFP0A9u9rghTi2bowsLzM88DcCjWlP6hKQqJZw42jqbywwHCX5Bm1hJ5mHrBqCcf57mbVtbm8neYA
axfU-8eeYgdOjpUK0ykk_XecG2lo.

Пример декодированного (из BASE64URL) Protected Header

{
   "typ":"JWT",
   "cty":"JWT",
   "enc":"gost28147-89",
   "kid":"7786A4BBB588B6AA4811"
}

Описание алгоритма расшифрования

Для того, чтобы расшифровать JWE Ciphertext необходимо выполнить следующие действия на VPNKeyTLS:

Проинициализировать устройство (INIT_DECIPHER_ID) путем передачи части с заголовком. Внести данные для расшифрования (DECIPHER_ID – 1 или более вызовов) и получить в ответ расшифрованные данные

Запросы необходимо отправлять на http://localhost:28016/vpnkeylocal/<SID2>/, где SID2-идентификатор сессии, получаемый после перехода в бизнес-систему.

Инициализация расшифрования

Модель запроса и ответа

Наименование Ограничение Назначение
id
Тип: ID_FORMAT
INIT_DECIPHER_ID id функции
head
Тип: BASE64
Для прошивок 399+: 2048 URL-encoded байтов base64;
Для прошивок 500+: 2048 байт бинарных данных (размер base64, требуемый для их кодировки, не регламентирован)
данные начала CMS в base64
obj_id
Тип: HANDLE
8 байт id сертификата для расшифрования
Дополнительно:
с версии 500 игнорируется
mode
Тип: ENUM
1, 2 Стандарт крипто операции: КС1 - токен только генерирует ключевую пару, данные шифруются "стартом.ехе"
КС2 - токен генерирует ключевую пару и шифрует данные.
Дополнительно:
Только нечётные версии 500+; Опционально; по умолчанию: 2.

Пример запроса

POST http://localhost:28016/vpnkeylocal/iJbnPrTXFHOd85ZxdKQyrqGV9cOe11WmCY/
POST data:
id=INIT_DECIPHER_ID&head=MIIHkAYJKoZIhvcNAQcDoIIHgTCCB30CAQCgggSfoIIEmzCCBJcwggRGoAMCAQICCneGpLu
1iLaqSBEwCAYGKoUDAgIDMIIBEzELMAkGA1UEBhMCUlUxLzAtBgNVBAoMJtCe0JDQniAi0KHQsdC10YDQsdCw0L3QuiDQoNC
%2B0YHRgdC40LgiMU0wSwYDVQQLDETQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAg0KHQkSDQoNCkI
CjQotC10YHRgtC%2B0LLRi9C5KTE%2BMDwGA1UEAww10JvQsNCy0YDQuNC90KHQki3QotC10YHRgtC%2B0LLQsNGPINC%2F0
LXRh9Cw0YLRjC3Qo9CmLTkxITAfBgNVBCEMGNCi0LXRgdGC0LjRgNGD0Y7RidC40LkgUTEhMB8GCSqGSIb3DQEJARYSY2FzY
nJmQHNiZXJiYW5rLnJ1MB4XDTE5MDkxMzA5MTAwMFoXDTIyMDkxMzA5MTE0NlowggE0MS8wLQYDVQQDDCbQn9C10YLRgCDQn
9C10YLRgNC%2BINCf0LXRgtGA0L7QstC40YfQqjERMA8GA1UEBAwI0J%2FQtdGC0YAxJjAkBgNVBCoMHdCf0LXRgtGA0L4g0
J%2FQtdGC0YDQvtCy0LjRh9CqMQswCQYDVQQGEwJSVTFzMHEGA1UECgxq0J7QsdGJ0LXRgdGC0LLQviDRgSDQvtCz0YDQsNC
90LjRh9C10L3QvdC%2B0Lkg0L7RgtCy0LXRgtGB0YLQstC10L3QvdC%2B0YHRgtGM0Y4gItCc0LDRiNCwINC4INCc0LXQtNC
y0LXQtNGMIjEOMAwGA1UECwwFcWV3cWUxEjAQBgNVBCEMCUJvb3Nzc3NzczEgMB4GCSqGSIb3DQEJARYRcXdlcXdlcUBtYXJ
ycnIucnIwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAgYHKoUDAgIeAQNDAARArVLHRJLdJl0SnsxGemCQ86Q8%2F9ZVBpV3KWRHL
CLBXSWGGuqF5JoSBtWtNhbuA26bBRg2V7pPhQ0Rdc7oIPa4DaOCAVMwggFPMGAGBSqFA2RvBFcMVdCh0YDQtdC00YHRgtCy0
L4g0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C%2B0LTQv9C40YHQuCAi0KDRg9GC0L7QutC10L0g0K3QptCfIDIuMCDQoCI
wEwYDVR0gBAwwCjAIBgYqhQNkcQEwJgYHKoUDA3sDAQQbDBlBMDAyQVIyMHTQn9C10YLRgCDQny4g0J8uMBQGByqFAwN7AwQ
ECQYHKoUDA3sFBDAOBgNVHQ8BAf8EBAMCBPAwFAYJYIZIAYb4QgEBAQH%2FBAQDAgeAMBYGA1UdJQEB%2FwQMMAoGCCsGAQU
FBwMCMBoGByqFAwN7AwUEDwwNVExTMDk4MjYwNzQzMDAdBgNVHQ4EFgQU5rnb2j7CXqcq3qijl32MWcYW%2F4owHwYDVR0jB
BgwFoAUm1I0EBH4CDR3jgrM1iYY3L4YOZwwCAYGKoUDAgIDA0EAT%2FHWRP%2Fz%2FgCdULkErGU064jF5vLjJNfJMXlRncz
gxVV6upiaymDBhzLReusDu%2FGWhHN60R5nXFm198nL2FeJzTGB5DCB4QIBAoAU5rnb2j7CXqcq3qijl32MWcYW%2F4owHAY
GKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEgacwgaQwKAQgCWiPsNUPtqNkZexMTh6vT9ZSGU7SvYpK3%2FNfssGYmx0EB
JT5Hy6geAYHKoUDAgIfAaBjMBwGBiqFAwICEzASBgcqhQMCAiMCBgcqhQMCAh4BA0MABEAhPN%2BtmOaBsODWae%2B4VafeI
xU0DbMh2Wq8GUly7IyyMyPZWBJF1qiAPmLAy1KW8rnud8LhGk5uSK%2FsFN5XKl8UBAgRpMHXsWF1DzCCAewGCSqGSIb3DQE
HATAdBgYqhQMCAhUwEwQIrpJ7hnKfDJ8GByqFAwICHwGAggG%2BT5WjPgiN6zfNjsRa823bljaSl93B4qmOD06RKtGwSsnpu
nrV0yF%2F6sWs7%2FSoSFCb3urrjy3JPNSmL%2F7TueqEWquIGkOdg73uALFUCH5dq7ZiBzJ%2FFeuJBBAIOeNyNxSeu1S7g
LxiGYn3rYNp13yCaumOEuo23fYBWC%2F9KSmB3ZQM%2BJEYkUoJJJQ2fCsV3EXXLlkENCDcbNKSKe2Mv6ZJT02wea0X0PjaG
7DlbK5TMFoE69Exs6oEdjAet5o3sWumGzb%2FpOEQwIg5mS4rBqUc3WLtpPlaozpOwtEAfJyu9mP0hBGh4z1uWAHlXkV5b5L
1aZyBOXvLAwTtgdbQ7kwYa0ffN00Dr4uHDqojq8THM9NMKyU6yK%2FnxE61XznGOj3aC%2BvF5RRrUNr50Xbl%2BmddwzDUJ
yQJoOIAzYUoA5kSb8sIyOH62HgqauuQhbdTd4sITjOZDeAPQXsRWOiiV%2F%2FvjGlREoiei3M5XxSufFdPAylFP0A9u9rgh
Ti2bowsLzM88DcCjWlP6hKQqJZw42jqbywwHCX5Bm1hJ5mHrBqCcf57mbVtbm8neYAaxfU%2B8eeYgdOjpUK0ykk%2FXecG2
lo%3D&mode=1

Параметры ответа

Наименование Ограничение Назначение
retcode
Тип: ENUM
2 байт код возврата функции
ctx_handle
Тип: HANDLE
8 байт хендл контекста операции
body_displ
Тип: NUMBER
2^32 - 1 размер (смещение) начала CMS в чистом виде (до кодирования base64)

Пример ответа

ctx_handle="Q9xLTQVn"&body_displ="0"&retcode="1"

Расшифрование данных

Наименование Ограничение Назначение
id
Тип: ID_FORMAT
DECIPHER_ID id функции
data
Тип: BASE64
Для прошивок 399+: 6144 URL-encoded байтов base64;
Для прошивок 500+ чётных версий и нечётных ранее 507:
для режима КС1: 15360 байтов бинарных данных;
для режима КС2: 16777216 байтов бинарных данных;
для нечётных 507 и выше: 2^64 - 1 байтов бинарных данных;
(размер base64, требуемый для их кодировки, не ограничен)
данные для расшифрования в base64;
размер декодированных данных должен быть кратным 8, начиная с размера (смещения) начала CMS в чистом виде (до кодирования base64)
ctx_handle
Тип: HANDLE
8 байт хендл контекста операции

Пример запроса

POST http://localhost:28016/vpnkeylocal/iJbnPrTXFHOd85ZxdKQyrqGV9cOe11WmCY/
POST data:
id=DECIPHER_ID&data=MIIHkAYJKoZIhvcNAQcDoIIHgTCCB30CAQCgggSfoIIEmzCCBJcwggRGoAMCAQICCneGpLu1iLa
qSBEwCAYGKoUDAgIDMIIBEzELMAkGA1UEBhMCUlUxLzAtBgNVBAoMJtCe0JDQniAi0KHQsdC10YDQsdCw0L3QuiDQoNC%2B
0YHRgdC40LgiMU0wSwYDVQQLDETQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAg0KHQkSDQoNCkICj
QotC10YHRgtC%2B0LLRi9C5KTE%2BMDwGA1UEAww10JvQsNCy0YDQuNC90KHQki3QotC10YHRgtC%2B0LLQsNGPINC%2F0L
XRh9Cw0YLRjC3Qo9CmLTkxITAfBgNVBCEMGNCi0LXRgdGC0LjRgNGD0Y7RidC40LkgUTEhMB8GCSqGSIb3DQEJARYSY2FzY
nJmQHNiZXJiYW5rLnJ1MB4XDTE5MDkxMzA5MTAwMFoXDTIyMDkxMzA5MTE0NlowggE0MS8wLQYDVQQDDCbQn9C10YLRgCDQ
n9C10YLRgNC%2BINCf0LXRgtGA0L7QstC40YfQqjERMA8GA1UEBAwI0J%2FQtdGC0YAxJjAkBgNVBCoMHdCf0LXRgtGA0L4
g0J%2FQtdGC0YDQvtCy0LjRh9CqMQswCQYDVQQGEwJSVTFzMHEGA1UECgxq0J7QsdGJ0LXRgdGC0LLQviDRgSDQvtCz0YDQ
sNC90LjRh9C10L3QvdC%2B0Lkg0L7RgtCy0LXRgtGB0YLQstC10L3QvdC%2B0YHRgtGM0Y4gItCc0LDRiNCwINC4INCc0LX
QtNCy0LXQtNGMIjEOMAwGA1UECwwFcWV3cWUxEjAQBgNVBCEMCUJvb3Nzc3NzczEgMB4GCSqGSIb3DQEJARYRcXdlcXdlcU
BtYXJycnIucnIwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAgYHKoUDAgIeAQNDAARArVLHRJLdJl0SnsxGemCQ86Q8%2F9ZVBpV
3KWRHLCLBXSWGGuqF5JoSBtWtNhbuA26bBRg2V7pPhQ0Rdc7oIPa4DaOCAVMwggFPMGAGBSqFA2RvBFcMVdCh0YDQtdC00Y
HRgtCy0L4g0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C%2B0LTQv9C40YHQuCAi0KDRg9GC0L7QutC10L0g0K3QptCfIDI
uMCDQoCIwEwYDVR0gBAwwCjAIBgYqhQNkcQEwJgYHKoUDA3sDAQQbDBlBMDAyQVIyMHTQn9C10YLRgCDQny4g0J8uMBQGBy
qFAwN7AwQECQYHKoUDA3sFBDAOBgNVHQ8BAf8EBAMCBPAwFAYJYIZIAYb4QgEBAQH%2FBAQDAgeAMBYGA1UdJQEB%2FwQMM
AoGCCsGAQUFBwMCMBoGByqFAwN7AwUEDwwNVExTMDk4MjYwNzQzMDAdBgNVHQ4EFgQU5rnb2j7CXqcq3qijl32MWcYW%2F4
owHwYDVR0jBBgwFoAUm1I0EBH4CDR3jgrM1iYY3L4YOZwwCAYGKoUDAgIDA0EAT%2FHWRP%2Fz%2FgCdULkErGU064jF5vL
jJNfJMXlRnczgxVV6upiaymDBhzLReusDu%2FGWhHN60R5nXFm198nL2FeJzTGB5DCB4QIBAoAU5rnb2j7CXqcq3qijl32M
WcYW%2F4owHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEgacwgaQwKAQgCWiPsNUPtqNkZexMTh6vT9ZSGU7SvYpK3
%2FNfssGYmx0EBJT5Hy6geAYHKoUDAgIfAaBjMBwGBiqFAwICEzASBgcqhQMCAiMCBgcqhQMCAh4BA0MABEAhPN%2BtmOaB
sODWae%2B4VafeIxU0DbMh2Wq8GUly7IyyMyPZWBJF1qiAPmLAy1KW8rnud8LhGk5uSK%2FsFN5XKl8UBAgRpMHXsWF1DzC
CAewGCSqGSIb3DQEHATAdBgYqhQMCAhUwEwQIrpJ7hnKfDJ8GByqFAwICHwGAggG%2BT5WjPgiN6zfNjsRa823bljaSl93B
4qmOD06RKtGwSsnpunrV0yF%2F6sWs7%2FSoSFCb3urrjy3JPNSmL%2F7TueqEWquIGkOdg73uALFUCH5dq7ZiBzJ%2FFeu
JBBAIOeNyNxSeu1S7gLxiGYn3rYNp13yCaumOEuo23fYBWC%2F9KSmB3ZQM%2BJEYkUoJJJQ2fCsV3EXXLlkENCDcbNKSKe
2Mv6ZJT02wea0X0PjaG7DlbK5TMFoE69Exs6oEdjAet5o3sWumGzb%2FpOEQwIg5mS4rBqUc3WLtpPlaozpOwtEAfJyu9mP
0hBGh4z1uWAHlXkV5b5L1aZyBOXvLAwTtgdbQ7kwYa0ffN00Dr4uHDqojq8THM9NMKyU6yK%2FnxE61XznGOj3aC%2BvF5R
RrUNr50Xbl%2BmddwzDUJyQJoOIAzYUoA5kSb8sIyOH62HgqauuQhbdTd4sITjOZDeAPQXsRWOiiV%2F%2FvjGlREoiei3M
5XxSufFdPAylFP0A9u9rghTi2bowsLzM88DcCjWlP6hKQqJZw42jqbywwHCX5Bm1hJ5mHrBqCcf57mbVtbm8neYAaxfU%2B
8eeYgdOjpUK0ykk%2FXecG2lo%3D&ctx_handle=Q9xLTQVn

Параметры ответа

Наименование Ограничение Назначение
retcode
Тип: ENUM
2 байт код возврата функции
deciphered_blob
Тип: BASE64
Соответствует размеру поданного на вход поля "data" часть расшифрованных данных

Пример ответа

deciphered_blob="ImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSm5iM04wTXpRdU1UQXRNakF4TWlKOS5leUp6ZFdJaU
9pSTNORFl5WkRKbVpEbGpaR1V6WmpNelltRXdOR1UxTkRjMk1EZG1aR0ZsWmpCak9UTTROV1UxWWpNeE1XSmhNRGsyTVRZe
U0yUXhZalpqTkRaaFl6VTNJaXdpWVhWa0lqb2lNakl6TXlJc0ltbHpjeUk2SW1oMGRIQTZMeTl6WW5RdGIyRm1jeTAyTXpn
Nk9UQTRNQzlwWTJScklpd2libUZ0WlNJNkl0Q2swS3pRdU5DYTBKVFFsOUN0MExVZzBMdlFsOUNiMEtnZzBZVFFtOUdKMEp
yUXFOQ3MwWW5RbE5DWDBKWFF2eUlzSW1sdWJpSTZJakUwT0RJM05EWTFOekFpTENKd2FHOXVaVjl1ZFcxaVpYSWlPaUkyTV
RFeE1URXhNVEV4TVNKOS5GWkJHeXY0LV9VMFd3eXBLcXRteVJTV3ZjbmEyVXRqSWpoQ1RfWFpEcGRFMHlEc2RtSDZfV3NtR
nBkLWUxQVJjallMNDJFQ25TUkZ6SnVFLXY4RlE0QSI="&retcode="1"

После декодирования из BASE64URL параметра ответа deciphered_blob получаем ответ в виде JOSE в представлении JWS Compact Serialization

JWS Compact Serialization состоит из 3 частей, разделитель между частями - символ '.'

В нашем случае структура JWS Compact Serialization будет иметь следующий вид: BASE64URL(Header) || '.' || BASE64URL(Payload) || '.' || BASE64URL(Signature)

Пример декодированного (из BASE64URL) параметра ответа deciphered_blob → JWS Compact Serialization

eyJ0eXAiOiJKV1QiLCJhbGciOiJnb3N0MzQuMTAtMjAxMiJ9.eyJzdWIiOiI3NDYyZDJmZDljZGUzZjMzYmEwNGU1NDc2MD
dmZGFlZjBjOTM4NWU1YjMxMWJhMDk2MTYyM2QxYjZjNDZhYzU3IiwiYXVkIjoiMjIzMyIsImlzcyI6Imh0dHA6Ly9zYnQtb
2Fmcy02Mzg6OTA4MC9pY2RrIiwibmFtZSI6ItCk0KzQuNCa0JTQl9Ct0LUg0LvQl9Cb0Kgg0YTQm9GJ0JrQqNCs0YnQlNCX
0JXQvyIsImlubiI6IjE0ODI3NDY1NzAiLCJwaG9uZV9udW1iZXIiOiI2MTExMTExMTExMSJ9.FZBGyv4-_U0WwypKqtmyRS
Wvcna2UtjIjhCT_XZDpdE0yDsdmH6_WsmFpd-e1ARcjYL42ECnSRFzJuE-v8FQ4A

Пример декодированного (из BASE64URL) Header

{
   "typ":"JWT",
   "alg":"gost34.10-2012"
}

Пример декодированного (из BASE64URL) Payload

{
   "sub":"7462d2fd9cde3f33ba04e547607fdaef0c9385e5b311ba0961623d16c46ac57",
   "aud":"2233",
   "iss":"http://sbt-oafs-638:9080/icdk",
   "name":"ФЬиКДЗЭе лЗЛШ фЛщКШЬщДЗЕп",
   "inn":"1482746570",
   "phone_number":"61111111111"
}

Ресурс /v1/change-client-secret

Client_secret можно сменить в Личном кабинете SberBusinessAPI или через /v1/change-client-secret.

Смена client-secret должна выполняться не реже 40 дней, иначе он заблокируется, и SberBusinessAPI будет недоступен. Разблокировать client-secret можно через отделение банка, менеджера или Личный кабинет SberBusinessAPI.

Начальное значение client_secret генерируется Банком и передается Партнеру вместе со значением client_id при первичной регистрации. Партнеру требуется сменить client_secret, полученный от Банка.

Шаги

1. Получить AccessToken.

2. Отправить запрос.

Для смены client_secret необходимо отправить POST-запрос (/v1/change-client-secret). В запросе необходимо передать авторизационный токен к собственным данным (Access Token), старое значение client_secret, новое значение new_client_secret и идентификатор сервиса client_id.

Модель запроса

Наименование Описание
Параметры заголовка
Authorization (String) Access token собственной организации, полученный через SSO. Пример: Bearer daf9a14c-821d-4bde-9c10-0e56e63d54a0-1
client_secret (String) Старое значение ClientSecret (client_secret >= 8 символов и <= 256 символов
new_client_secret (String) Новое значение ClientSecret (client_secret >= 8 символов и <= 256 символов
client_id (String) Идентификатор сервиса

Пример запроса

curl -X POST --header 'Content-Type : application/x-www-form-urlencoded' --header 'Accept: application/x-www-form-urlencoded'
'https://edupirfintech.sberbank.ru:9443/ic/sso/api/v1/change-client-secret?
access_token=daf9a14c-821d-4bde-9c100e56e63d54a0-1
&client_secret=987654322&new_client_secret=987654321&client_id=8213'

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

Наименование Описание
clientSecretExpiration Number Период (в днях) действия Client Secret = 40

Дополнительная информация

Коды возврата

Код возврата Описание кода возврата Причина возникновения
200 ОК
Успешный код возврата
302 invalid_grant
Unknown code = хххххххх-хххх-хххх-хххх-хххххххххххх-х Указан неверный код авторизации: а) несуществующий код авторизации; б) код авторизации, время жизни которого истекло; в) код авторизации, ранее использованный для получения access_token;
Invalid client secret for authz code 'хххххххх-хххх-хххх-хххх-хххххххххххх-х Указан неверный clientsecret или clientid или clientsecret и clientid
Redirect uri 'https://.ru' is invalid Неверный redirect_uri
Unknown refresh token = хххххххх-хххх-хххх-хххх-хххххххххххх-х Указан неверный refresh_token: а) несуществующий refresh_token; б) refresh_token, время жизни которого истекло; в) refresh_token, ранее использованный для получения нового access_token и refresh_token;
Invalid client secret for refresh token хххххххх-хххх-хххх-хххх-хххххххххххх-х Указан неверный clientsecret (Запрос на получение новых accesstokenиrefreshtokenпо действующемуrefreshtoken)
Ext service for authz code хххххххх-хххх-хххх-хххх-хххххххххххх-х is blocked Внешний сервис заблокирован в системе (запрос на получение access_token и refresh_token по коду авторизации)
Неверно указан адрес sso для подключения
unsupported_grant_type
Grant type 'authorization_code1' is not supported Указан неверный тип кода авторизации (должен быть authorization_code)
Grant type 'refresh_token1' is not supported Указан неверный тип refresh_token (должен быть refresh_token)
unauthorized_client
Unknown client_id = 'ХХХХ' Указан неверный clientid или clientid и clientsecret. (Запрос на получение новых accesstokenиrefreshtokenпо действующемуrefreshtoken)
Client 'ХХХХ' is blocked Внешний сервис заблокирован в системе (запрос на новых получение access_token и refresh_token по refresh_token)
400 invalid_request
Invalid code verifier Указан неверный код проверки
bad_request
Неверный формат client_secret Длина client_secret меньше 8 или больше 256 символов
Значение new_client_secret совпадает с client_secret
unsupported_token_type
Тип токена не поддерживается Указан неверный тип токена
401 unauthorized
Неверный формат access_token Указан некорректный или просроченный access_token.
Access_token выдан пользователю не принадлежащий к организации предоставляющий сервис
406 not_acceptable
В соответствии с текущими настройками сервиса с clientId=" + clientId + " необходимо запрашивать ответ в формате JWE Compact Serialization В запросе был передан http-заголовок Accept со значением application/json, но в настройках сервиса установлен признак шифрования
В соответствии с текущими настройками сервиса с clientId=" + clientId + " необходимо запрашивать ответ в формате JSON В запросе был передан http-заголовок Accept со значением application/jose, но в настройках сервиса не установлен признак шифрования
500 unknown_exception
Внутренняя ошибка сервера
503 service_unavailable
Сервис временно недоступен Технологическое окно