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

Получение токенов доступа

Обновлено 29 ноября 2024

Alt text /ic/sso/api/v2/oauth/token

Запрос позволяет обменять код авторизации на токены доступа (access_token, refresh_token, id_token), а также обновить access_token.

Для обращения к ресурсу необходимо отправлять запрос на:

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

Получение access token, refresh token, id token

Request

/ic/sso/api/v2/oauth/token

НаименованиеТипФорматRegexpОбязательностьОписание
HEADER
Content-Typestringstring^(application/json|text/plain|application/xml|multipart/form-data|application/x-www-form-urlencoded)$requiredТип данных, которые передаются в теле запроса.
Должен содержать значение application/x-www-form-urlencoded.
Acceptstringstring^(application/json|application/jose)optionalУказывает на формат данных, который вы готовы принять от Банка.
Если ответ не требуется в зашифрованном виде, то может быть не указан или передан со значением application/json.
Если необходимо получить ответ на запрос токена в зашифрованном виде, то необходимо передать параметр со значением application/jose.
From URL Encoded
grant_typestringstring^(authorization_code|refresh_token)$requiredУказывает тип предоставления, который используется для запроса токена доступа
Значение должно быть authorization_code
codestringstring^[a-zA-Z0-9]{38}$requiredКод авторизации.
В параметре необходимо использовать значение code, полученное на адрес redirect_uri при успешной аутентификации пользователя по URL аутентификации /v2/oauth/authorize.

Каждый code может быть использован только один раз. Например, если при запросе access_token по коду авторизации была допущена ошибка в каком либо из параметров и передано значение code, то повторное использование данного значения code уже будет недопустимо.
client_idstringstring^[a-zA-Z0-9]+$requiredУникальный идентификатор вашей Платформы, полученный при подключении к Sber API
redirect_uristringstring^(https?:\/\/)?(www.)?([a-z0-9-.]+.[a-z]{2,3})(:[0-9]{1,5})?\/?.*$requiredАдрес вашей Платформы, на который СберБизнес ID возвращает пользователя при успешной аутентификации. Должен в точности совпадать со значением, переданным ранее при вызове ресурса /v2/oauth/authorize

Пример:
Если в redirect_uri было указано https://example.ru/auth/login/register, то точно такое же значение должно быть указано при запросе /v2/oauth/token, даже если зарегистрирован redirect_uri = https://example.ru/auth/login
client_secretstringstring^[a-zA-Z0-9]{8,256}$requiredПароль вашей Платформы. Вы его впервые получаете при подключении к Sber API и в последующем периодически обновляете.
code_verifierstringstring^[a-zA-Z0-9]+$optionalПараметр в соответствии с надстройкой PKCE над протоколом OAuth 2.0. Раскодированное значение code_challenge переданное ранее при вызове ресурса /authorize. См. правила формирования параметра в PKCE.

Становится обязательным, если при регистрации платформы настройка PKCE была подключена или при вызове ресурса /v2/oauth/authorize параметр code_challenge был передан.

Responses

200 (OK)

НаименованиеТипОбязательностьОписание
HEADER
Content-TypestringrequiredЕсли в запросе:
- не был передан заголовок Accept или передан в значении application/json, то в ответе параметр будет содержать значение application/json
- был передан заголовок Accept в значении application/jose, то в ответе будет указано application/jose и полученное тело ответа потребуется расшифровать.
BODY
{
access_tokenstringrequiredАвторизационный токен доступа
token_typestringrequiredТип токена. Всегда возвращается значение Bearer
expires_instringrequiredСрок жизни токена в секундах.
Срок жизни access_token составляет 60 минут.
refresh_tokenstringrequiredТокен обновления. Используется для обновления Access Token. Подробнее про применение значения refresh_token см. в Обновление токена доступа (access_token)
Срок жизни refresh_token составляет 180 дней.
scopestringrequiredНабор атрибутов (claim) и операций, которые будут доступны Платформе после авторизации клиента.
id_tokenstringrequiredЗакодированный в Base64URL набор атрибутов клиента, необходимых для идентификации пользователя. Атрибуты разделены символами «.», каждый необходимо декодировать отдельно.
}

400 (Bad request)

errorerror_descriptionОписание причины
invalid_grantMissing grant_type parameter valueНе заполнен обязательный параметр grant_type
invalid_grantOne of the params (code, refresh_token) is required at requestНе заполнен один из обязательных параметров code или refresh_token
invalid_grantFailed to extract shoulder ID from {0}В параметре code или refresh_token указано некорректное значение
invalid_grantUnknown code = '{0}'Не найдено переданное значение code. Например, потому что срок действия кода истек или по данному коду уже осуществлялся вызов.
invalid_grantUnknown refresh token = '{0}'Не найдено переданное значение refresh_token. Например, потому что срок действия токена истек или по данному токену уже был осуществлен обмен на access_token.
invalid_grantExt service for authz code '{0}' is blockedПлатформа зарегистрированное по указанному client_id - заблокировано.
invalid_grantInvalid credentials for authz code '{0}'При запросе access_token по коду авторизации указан неверный client_secret
invalid_grantInvalid credentials for refresh_token '{0}'При запросе access_token по refresh_token указан неверный client_secret
invalid_grantRedirect uri '{0}' is invalidПереданный параметр redirect_uri не совпадает со значением полученным ранее при запросе кода авторизации
invalid_grantFailed to verify code verifierХешированное значение code_challenge, полученное в запросе /authorize не совпадает со значением, полученным в параметре code_verifier
invalid_requestMissing parameters: codeВ параметре grant_type указано значение authorization_code, но отсутствует значение в параметре code
invalid_requestMissing parameters: refresh_tokenВ параметре grant_type указано значение refresh_token, но отсутствует значение в параметре refresh_token
invalid_requestMissing parameters: {0}Отсутствует параметр redirect_uri
invalid_requestclient secret expiredИстек срок действия client_secret
invalid_requestCode verifier requiredПри запросе кода авторизации был указан code_challenge, но в параметрах запроса токена отсутствует параметр code_verifier
invalid_requestInvalid code verifierЗначение code_verifier не отвечает параметрам протокола PKCE
unauthorized_clientUnknown client_id = '{0}'Переданный client_id не зарегистрирован
unauthorized_clientClient '{0}' is blockedПлатформа зарегистрированное по указанному client_id - заблокировано.
unsupported_grant_typeGrant type '{0}' is not supported"В параметре grant_type указано значение отличное от authorization_code или refresh_token
НаименованиеТипОбязательностьОписание
{
errorstringrequiredОшибка запроса
error_descriptionstringrequiredОписание ошибки
}

403 (Forbidden)

errorCodeerrorMsgОписание причины
requestForbiddenThe server configuration prohibits executing a request to the endpoint {0}На данном сервере запрещен вызов указанного ресурса.
Например, вызов ресурса /v2/oauth/token осуществляется на домен https://efs-sbbol-ift-web.testsbi.sberbank.ru:9443, а должен осуществляться на домен https://iftfintech.testsbi.sberbank.ru:9443
certificateNotFoundThe certificate was not whitelisted for client_id={0}Не пройдена проверка сертификата по белому списку
НаименованиеТипОбязательностьОписание
{
errorCodestringrequiredОшибка запроса
errorMsgstringrequiredОписание ошибки
}

406 (Not acceptable)

errorerror_descriptionОписание причины
SSOREQUESTED_FORMAT_NOT_ACCEPTABLE_EXCEPTIONJSONВ соответствии с текущими настройками платформы необходимо запрашивать ответ в формате JSON
SSOREQUESTED_FORMAT_NOT_ACCEPTABLE_EXCEPTIONJWE Compact SerializationВ соответствии с текущими настройками платформы необходимо запрашивать ответ в формате JWE Compact Serialization
НаименованиеТипОбязательностьОписание
{
errorstringrequiredОшибка запроса
error_descriptionstringrequiredОписание ошибки
}

429 (Too Many Requests)
CauseMessageDescription
TOO_MANY_REQUESTSПревышен лимит запросов. Повторите операцию позже.Количество запросов к данному методу за ограниченное время превысило допустимое значение. Пользователю необходимо повторить запрос позднее
НаименованиеТипОбязательностьОписание
Notice{
causestringoptionalПричина или основание сообщения,
referenceIdstringoptionalУникальный идентификатор ошибки (UUID),
messagestringoptionalСообщение,
}
500 (Internal Server Error)

CauseMessageDescription
UNKNOWN_EXCEPTIONВнутренняя ошибка сервераСделайте повторный запрос. Если ошибка повторится, подготовьте логи запроса и направьте в службу Технической поддержки Банка.
НаименованиеТипОбязательностьОписание
Notice {
causestringoptionalПричина или основание сообщения,
referenceIdstringoptionalУникальный идентификатор ошибки (UUID),
messagestringoptionalСообщение,
}

access_token

Это уникальный идентификатор, который позволяет платформе подтвердить Банку, что клиент дал ему разрешение на доступ к его данным. Он необходим для использования других запросов Sber API.
С момента получения токен доступа (access_token) действителен 60 минут.

refresh_token

access_token имеет временный характер действия (60 минут с момента получения). Для обновления токена доступа необходимо использовать токен обновления (refresh_token).
С момента получения токен обновления (refresh token) действителен 180 дней.

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

ID token (/token)

Этот токен используется для подтверждения того, что пользователь успешно прошел процесс авторизации и имеет доступ к запрашиваемым операциям.

ID token представлен в виде JSON Web Token (JWT) и структурой:

  • Алгоритм подписи и тип токена (Header);
  • Полезная нагрузка (Payload);
  • Электронная подпись (Signature).

Каждая часть ответа, разделенная точкой, должна декодироваться отдельно. Для декодирования следует воспользоваться алгоритмом Base64URL Encoding.

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

Пример ID Token

ПараметрОписание
HEADER
typТип токена
algАлгоритм шифрования
PAYLOAD
acrУровень аутентификации пользователя:
- acr=loa-2 (пользователь аутентифицируется с помощью устройства защиты)
- acr=loa-3 (пользователь использует подтверждение по одноразовому SMS-паролю для аутентификации)
amrРесурсы аутентификации:
- amr=pwd — пользователь аутентифицируется с помощью устройства защиты;
- amr= {pwd, mca, mfa, otp, sms} — пользователь использует подтверждение по одноразовому SMS-паролю для аутентификации
audИдентификатор платформы, для которого сформирован ID Token
auth_timeВремя аутентификации пользователя в СберБизнес ID. Формат поля Unix time
azpИдентификатор платформы, для которого сформирован ID Token
expВремя, после которого ID Token не принимается для обработки. Формат поля Unix time
iatВремя формирования ID Token. Формат поля Unix time
issURL сервиса, сформировавшего ID Token
nonceЗначение параметра nonce, полученного при запросе авторизации /v2/oauth/authorize
subУникальный идентификатор пользователя
SIGNATURE
Массив байт электронной подписиПроверка электронной подписи, полученной в ID Token (содержимое ответа ID Tokena после второй точки), выполняется, используя алгоритм, указанный в параметре заголовка JWT alg. Платформе необходимо проверить подпись сертификатом Банка


Обновление access_token, refresh_token

Cрок действия токена доступа (access_token) 60 минут. Поэтому требуется обновление токена доступа для последующих запросов в канале Sber API.

Обновление токена доступа

Alt text /ic/sso/api/v2/oauth/token

Запрос /v2/oauth/token позволяет получить новый токен доступа (access_token) и новый токен обновления (refresh_token).

Для использования запроса необходимо указать значение токена обновления (refresh_token), полученный при последней авторизации по СберБизнес ID или последнего обновления токена доступа.

Использованный токен обновления (refresh_token) переводится в статус резервного на 2 часа с момента выпуска новой пары ключей (access_token/refresh_token).

Если по каким-то причинам сформированная пара не была получена от Банка, то рекомендуется повторно отправить запрос на актуализацию ключей в течение 1 часа от момента отправки первой попытки, используя тот же refresh_token. Для последующих обновлений ключей доступа необходимо использовать refresh_token из новой пары ключей (access_token/refresh_token).

Для обращения к ресурсу необходимо отправлять запрос на:

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

Request

/ic/sso/api/v2/oauth/token

НаименованиеТипФорматRegexpОбязательностьОписание
HEADER
Content-Typestringstring^(application/json|text/plain|application/xml|multipart/form-data|application/x-www-form-urlencoded)$requiredТип данных, которые передаются в теле запроса.
Должен содержать значение application/x-www-form-urlencoded.
Acceptstringstring^(application/json|application/jose)optionalУказывает на формат данных, который вы готовы принять от Банка.
Если ответ не требуется в зашифрованном виде, то может быть не указан или передан со значением application/json.
Если необходимо получить ответ на запрос токена в зашифрованном виде, то необходимо передать параметр со значением application/jose.
BODY
{
grant_typestringstring^(authorization_code|refresh_token)$requiredУказывает тип предоставления, который используется для запроса токена доступа
Значение должно быть refresh_token
refresh_tokenstringstring^[a-zA-Z0-9]{38}$requiredЗначение refresh_token полученное при обмене кода авторизации на access_token
client_idstringstring^[a-zA-Z0-9]+$requiredУникальный идентификатор вашей Платформы, полученный при подключении к Sber API
client_secretstringstring^[a-zA-Z0-9]{8,256}$requiredПароль вашей Платформы. Вы его впервые получаете при подключении к Sber API и в последующем периодически обновляете.
}

Responses

200 (OK)

НаименованиеТипОбязательностьОписание
HEADER
Content-TypestringrequiredЕсли в запросе:
- не был передан заголовок Accept или передан в значении application/json, то в ответе параметр будет содержать значение application/json
- был передан заголовок Accept в значении application/jose, то в ответе будет указано application/jose и полученное тело ответа потребуется расшифровать.
BODY
{
access_tokenstringrequiredАвторизационный токен доступа
token_typestringrequiredТип токена. Всегда возвращается значение Bearer
expires_instringrequiredСрок жизни токена в секундах.
Срок жизни access_token составляет 60 минут.
refresh_tokenstringrequiredТокен обновления. Используется для обновления Access Token. Подробнее про применение значения refresh_token см. в Обновление токена доступа (access_token)
Срок жизни refresh_token составляет 180 дней.
scopestringrequiredНабор атрибутов (claim) и операций, которые будут доступны Платформе после авторизации клиента.
id_tokenstringrequiredЗакодированный в Base64URL набор атрибутов клиента, необходимых для идентификации пользователя. Атрибуты разделены символами «.», каждый необходимо декодировать отдельно. Подробнее о декодировании и параметрах id_token см. в ID Token
}

400 (Bad request)

errorerror_descriptionОписание причины
invalid_grantMissing grant_type parameter valueНе заполнен обязательный параметр grant_type
invalid_grantOne of the params (code, refresh_token) is required at requestНе заполнен один из обязательных параметров code или refresh_token
invalid_grantFailed to extract shoulder ID from {0}В параметре code или refresh_token указано некорректное значение
invalid_grantUnknown code = '{0}'Не найдено переданное значение code. Например, потому что срок действия кода истек или по данному коду уже осуществлялся вызов.
invalid_grantUnknown refresh token = '{0}'Не найдено переданное значение refresh_token. Например, потому что срок действия токена истек или по данному токену уже был осуществлен обмен на access_token.
invalid_grantExt service for authz code '{0}' is blockedПлатформа зарегистрированное по указанному client_id - заблокировано.
invalid_grantInvalid credentials for authz code '{0}'При запросе access_token по коду авторизации указан неверный client_secret
invalid_grantInvalid credentials for refresh_token '{0}'При запросе access_token по refresh_token указан неверный client_secret
invalid_grantRedirect uri '{0}' is invalidПереданный параметр redirect_uri не совпадает со значением полученным ранее при запросе кода авторизации
invalid_grantFailed to verify code verifierХешированное значение code_challenge, полученное в запросе /authorize не совпадает со значением, полученным в параметре code_verifier
invalid_requestMissing parameters: codeВ параметре grant_type указано значение authorization_code, но отсутствует значение в параметре code
invalid_requestMissing parameters: refresh_tokenВ параметре grant_type указано значение refresh_token, но отсутствует значение в параметре refresh_token
invalid_requestMissing parameters: {0}Отсутствует параметр redirect_uri
invalid_requestclient secret expiredИстек срок действия client_secret
invalid_requestCode verifier requiredПри запросе кода авторизации был указан code_challenge, но в параметрах запроса токена отсутствует параметр code_verifier
invalid_requestInvalid code verifierЗначение code_verifier не отвечает параметрам протокола PKCE
unauthorized_clientUnknown client_id = '{0}'Переданный client_id не зарегистрирован
unauthorized_clientClient '{0}' is blockedПлатформа зарегистрированное по указанному client_id - заблокировано.
unsupported_grant_typeGrant type '{0}' is not supported"В параметре grant_type указано значение отличное от authorization_code или refresh_token
НаименованиеТипОбязательностьОписание
{
errorstringrequiredОшибка запроса
error_descriptionstringrequiredОписание ошибки
}

403 (Forbidden)

errorCodeerrorMsgОписание причины
requestForbiddenThe server configuration prohibits executing a request to the endpoint {0}На данном сервере запрещен вызов указанного ресурса.
Например, вызов ресурса /v2/oauth/token осуществляется на домен https://efs-sbbol-ift-web.testsbi.sberbank.ru:9443, а должен осуществляться на домен https://iftfintech.testsbi.sberbank.ru:9443
certificateNotFoundThe certificate was not whitelisted for client_id={0}Не пройдена проверка сертификата по белому списку
НаименованиеТипОбязательностьОписание
{
errorCodestringrequiredОшибка запроса
errorMsgstringrequiredОписание ошибки
}

406 (Not acceptable)

errorerror_descriptionОписание причины
SSOREQUESTED_FORMAT_NOT_ACCEPTABLE_EXCEPTIONJSONВ соответствии с текущими настройками платформы необходимо запрашивать ответ в формате JSON
SSOREQUESTED_FORMAT_NOT_ACCEPTABLE_EXCEPTIONJWE Compact SerializationВ соответствии с текущими настройками платформы необходимо запрашивать ответ в формате JWE Compact Serialization
НаименованиеТипОбязательностьОписание
{
errorstringrequiredОшибка запроса
error_descriptionstringrequiredОписание ошибки
}

429 (Too Many Requests)
CauseMessageDescription
TOO_MANY_REQUESTSПревышен лимит запросов. Повторите операцию позже.Количество запросов к данному методу за ограниченное время превысило допустимое значение. Пользователю необходимо повторить запрос позднее
НаименованиеТипОбязательностьОписание
Notice{
causestringoptionalПричина или основание сообщения,
referenceIdstringoptionalУникальный идентификатор ошибки (UUID),
messagestringoptionalСообщение,
}
500 (Internal Server Error)

CauseMessageDescription
UNKNOWN_EXCEPTIONВнутренняя ошибка сервераСделайте повторный запрос. Если ошибка повторится, подготовьте логи запроса и направьте в службу Технической поддержки Банка.
НаименованиеТипОбязательностьОписание
Notice {
causestringoptionalПричина или основание сообщения,
referenceIdstringoptionalУникальный идентификатор ошибки (UUID),
messagestringoptionalСообщение,
}


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