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

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

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

Для авторизации (/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. Для возможности подписывать документы необходимо выпустить сертификат ЭП:

- Через интерфейс СББОЛ по документации [Как выпустить сертификат электронной подписи без визита в банк](https://www.sberbank.ru/help/business/sbbol/100080). 
- Через SberBusiness API по документации [Криптографические ресурсы](https://developer.sberbank.ru/doc/v3/sbbol/partners-crypto) .

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

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

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

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

- Через интерфейс СББОЛ по документации [Как выпустить сертификат электронной подписи без визита в банк](https://www.sberbank.ru/help/business/sbbol/100080). 
- Через SberBusiness API по документации [Криптографические ресурсы](https://developer.sberbank.ru/doc/v3/sbbol/partners-crypto).

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 Ссылка на страницу сервиса, на которую необходимо перенаправить пользователя после успешной авторизации (обязательный параметр, должен быть одинаковым в запросе /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 PAYDOCRU inn email&responsetype=code&clientid=74617&state=af0ifjsldkj&nonce=n-0S6WzA2Mj&redirecturi=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 PAYDOCRU inn email&responsetype=code&clientid=74617&state=af0ifjsldkj&nonce=n-0S6WzA2Mj&redirecturi=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 по коду авторизации по каким-либо причинам (например, неправильно передан clientsecret) код авторизации удаляется и все дальнейшие попытки получить по нему AccessToken (даже с корректными параметрами) будут приводить к ошибке с текстом «Unknown code = <кодавторизации>». Запрос должен производиться только методом POST с типом данных application/x-www-form-urlencoded.

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

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

Параметр Описание
grant_type Значение должно быть «authorization_code» (обязательный параметр)
code Значение кода авторизации (обязательный параметр)
client_id Банковский идентификатор сервиса полученный от менеджера при регистрации приложения (обязательный параметр )
client_secret Авторизационный ключ сервиса (обязательный параметр). Генерируется банком в момент заведения сервиса и передается оффлайн. После получения требуется, в обязательном порядке, сменить clientsecret методом /v1/change-client-secret или в Личном кабинете SberBusinessAPI. В дальнейшем, требуется менять clientsecret до истечения срока жизни, составляющий 40 дней.
redirect_uri Ссылка на страницу сервиса, на которую необходимо перенаправить пользователя после успешной авторизации (обязательный параметр, должен быть одинаковым в запросе /authorize и /token)
code_verifier Код проверки, на основе которого получили код вызова (codechallenge) путем применения метода преобразования codechallenge_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 Хэш от идентификатора организации, с которой связан пользователь

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

Согласно стандарту 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-идентификатор сессии, получаемый после перехода в бизнес-систему.

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

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

Параметры запроса Ограничение Назначение
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=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
INIT_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:

Проинициализировать устройство (INITDECIPHERID) путем передачи части с заголовком. Внести данные для расшифрования (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
INIT_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 (всегда должно соответствовать ответу в параметре tokentype=) и значения из accesstoken. При запросе Партнером информации о пользователе своей организации не заполняется claimaccounts

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

| Параметры заголовка |Описание| | 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"
      }
   ]
}

Согласно спецификации 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:

Проинициализировать устройство (INITDECIPHERID) путем передачи части с заголовком. Внести данные для расшифрования (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=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
INIT_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.

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

Шаги:

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

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

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

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

Query Parameters
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 { "clientSecretExpiration":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 | Неверный redirecturi | | | Unknown refresh token = хххххххх-хххх-хххх-хххх-хххххххххххх-х | Указан неверный refreshtoken: а) несуществующийrefreshtoken; б)refreshtoken, время жизни которого истекло; в)refreshtoken, ранее использованный для получения новогоaccesstokenиrefreshtoken; | | | Invalid client secret for refresh token хххххххх-хххх-хххх-хххх-хххххххххххх-х | Указан неверный clientsecret (Запрос на получение новых access_token и refresh_token по действующему refresh_token) | | | Ext service for authz code хххххххх-хххх-хххх-хххх-хххххххххххх-х is blocked | Внешний сервис заблокирован в системе (запрос на получение access_token и refresh_token по коду авторизации) | | | | Неверно указан адрес sso для подключения | | | unsupported_grant_type | | | | Grant type 'authorizationcode1' is not supported | Указан неверный тип кода авторизации (должен быть authorizationcode) | | | Grant type 'refreshtoken1' is not supported | Указан неверный тип refreshtoken(должен бытьrefreshtoken) | | | `unauthorizedclient| | | | Unknown client_id = 'ХХХХ' | Указан неверный client_id или client_id и client_secret. (Запрос на получение новых ``access_token`` и ``refresh_token`` по действующему ``refresh_token``) | | | Client 'ХХХХ' is blocked | Внешний сервис заблокирован в системе (запрос на новых получение ``access_token`` и ``refresh_token`` по ``refresh_token``) | | **400** |invalidrequest| | | | Invalid code verifier | Указан неверный код проверки | | |badrequest| | | | Неверный форматclientsecret| Длинаclientsecretменьше 8 или больше 256 символов | | | | Значениеnewclientsecretсовпадает сclientsecret| | |unsupportedtokentype| | | | Тип токена не поддерживается | Указан неверный тип токена | | **401** |unauthorized` | | | | Неверный формат accesstoken| Указан некорректный или просроченныйaccesstoken. | | | |Accesstoken выдан пользователю не принадлежащий к организации предоставляющий сервис | | 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 | | | | Сервис временно недоступен | Технологическое окно |

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

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