Шаг 2. Запрос access token и id token
На Схеме взаимодействия обозначен как «13. Запрос access token, id token».
Параметры запроса
Для успешного выполнения запроса необходимо использовать сертификат, полученый при регистрации приложения на портале Сбер ID, по нашей документации.
Back-end Партнера инициирует запрос в back-end Банка на получение access token и Id token, направляя в запросе полученный ранее код авторизации.
Пример запроса на получение access token и Id token:
- Тестовый стенд
- ПРОМ
POST 'https://oauth-psi.sber.ru/ru/prod/tokens/v2/oidc' \
--header 'accept: application/json' \
--header 'rquid: 012345678901234567890123456789FF' \
--header 'content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code=FC49F1EA-245A-0FCD-2077-F3F73******' \
--data-urlencode 'client_id=5e7ee80a-6724-4078-8ee4-1dd63******' \
--data-urlencode 'client_secret=L4hE5nH3wB5lC6sP0bO7bA6yM5bH5hA3lN3******' \
--data-urlencode 'redirect_uri=https://api.developer.sber.ru/'
POST 'https://oauth.sber.ru/ru/prod/tokens/v2/oidc' \
--header 'accept: application/json' \
--header 'rquid: 012345678901234567890123456789FF' \
--header 'content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code=FC49F1EA-245A-0FCD-2077-F3F73******' \
--data-urlencode 'client_id=5e7ee80a-6724-4078-8ee4-1dd63******' \
--data-urlencode 'client_secret=L4hE5nH3wB5lC6sP0bO7bA6yM5bH5hA3lN3******' \
--data-urlencode 'redirect_uri=https://api.developer.sber.ru/'
Важно!
Время timeout для ответа Сбер API — 10 сек.
Описание полей запроса на получение access token и id token
№ п/п | Наименование заголовка/поля | Заголовок / Поле | Описание | Обязательность поля |
---|---|---|---|---|
1 | RqUID | Заголовок | Уникальный идентификатор сообщения, «maxLength=32 и pattern=([0-9][a-f][A-F]){32})», переданный во входящем сообщении. Необходим для журналирования входящих вызовов и удобства разбора инцидентов. Чтобы обеспечить уникальность, можно использовать стандартные библиотеки и классы для генерации UUID/GUID (https://ru.wikipedia.org/wiki/UUID), убрав из результата разделители «-». | Да |
2 | content-type | Заголовок | Всегда принимает значение "application/x-www-form-urlencoded" | Нет |
3 | accept | Заголовок | Может принимать значения application/json или application/jwt. | Нет |
4 | grant_type | Поле | Указывается равным authorization_code . | Да |
5 | code | Поле | Код авторизации, полученный от Банка. (См. Ответ на запрос кода авторизации). | Да |
6 | redirect_uri | Поле | Значение параметра redirect_uri , которое было указано в запросе кода авторизации. | Да |
7 | client_id | Поле | Идентификатор системы Партнера, полученный партнером в личном кабинете после регистрации приложения. | Да |
8 | client_secret | Поле | Пароль системы Партнера, полученный партнером в личном кабинете после регистрации приложения. | Да |
Параметры ответа
В случае успешной обработки запроса Back партнера получает access token и Id token. Ответ типа HTTP 200 OK. Описание полей ответа приведено в таблице Описание полей ответа.
Пример JSON сообщения - ответа в случае успешной обработки запроса:
HTTP/1.1 200 OK rquid: 012345678901234567890123456789FF { "access_token":"f213a511-58d7-4e7c-88b3-a6de380c81da",
"token_type":"bearer", "expires_in":60, "scope": "openid name email",
"id_token":"eyJhbGciOiJub25lIn0.eyJzdWIiOiI5ODg5YmQ2NDAzYzk0Nzg4ZGI0ZDY5ODVjY2U4MWViNz
c4MDE5NTU5ZTc3MWQyNTczMzFjODljMWUzMGY5NzRmZGJlOTQwODQ0YTg2ZGRjMyIsImF1dGhfdGltZSI6MTU2
ODk4MzE0Niwibm9uY2UiOiJMaXdrZEtoSU9ockRLdkpYMXNndkI1eGtrRlVWMm01am5BWUs3ZlhUSFNFIiwiaX
NzIjoiaHR0cHM6Ly9pZnQtY3NhLnRlc3RvbmxpbmUuc2JlcmJhbmsucnU6NDQ1Ni9DU0FGcm9udC9pbmRleC5k
byIsImlhdCI6MTU2ODk4MzE1OSwiZXhwIjoxNTY4OTgzNDQ2LCJhdWQiOiJFMzJCODZDMi1FNTUxLUREODMtNT JGRi1GREE2MjA2Q0VBM0MifQ." }
Описание полей ответа
№ п/п | Наименование поля | Описание | Пример |
---|---|---|---|
1 | access_token | Сгенерированный Access token. | f213a511-58d7-4e7c-88b3-a6de380c81da |
2 | token_type | Тип запрашиваемого токена. Всегда передается значение «Bearer». | Bearer |
3 | expires_in | Время в секундах, в течение которого действует Access Token. | 60 |
4 | scope | Список групп персональных данных, на получение которых выдан данный токен. В список так же по умолчанию включается название сервиса API | openid name https://api.sberbank.ru/sberbankid/userinfo |
5 | id_token | Закодированный набор атрибутов пользователя в формате base64_url , необходимый для идентификации пользователя. | eyJhbGciOi-IgZ29zdDM0LTEwLjIwMTIifQ.ewogImlzcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiMTAwMSIsCi-Aibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjg0NTcwLAogImlhdCI6IDEzMTEyODA5NzAK4oCcc2lkMuKAnTrigJ0xMjM0NTY4Nzk5MjU14oCdIAog4oCcbmFtZSI6IOKAnNCY0LLQsNC90L7QsiDQmNCy0LDQvSDQmNCy0LDQvdC+0LLQuNGH4oCdCn0.EJqZnRKZVo0Q1ZQLW1COTJLMjd1aGJVSlUxcDFyX3dXMWdGV0ZPRWpYaw |
Пример ID Token:
{
"iss": "id.sber.ru",
"sub": "74c64d08bdd5e6f2b94770e9fed9342b9054f22bea1571e68448c8cae83e0d80ec206549e11d13fc",
"aud": "DA5278AC - A07F - C01A -B2D3 - C231DBB2E20F",
"exp": 141254872,
"iat": 1411250872,
"auth_time": 1411250871,
"nonce": "n - 0 S6_WzA2Mj"
}
Описание полей ID Token
№ п/п | Наименование поля | Описание | Примечание |
---|---|---|---|
1 | sub | Неизменный уникальный идентификатор клиента в АС Банка, передаваемый внешним потребителям.Максимальная длина 96 символов. | Идентификатор клиента банка, используемый внешними АС. Идентификатор может быть сохранен у Партнера. |
2 | iss | URL сервиса (URL АС банка), сформировавшего ID Token. | |
3 | aud | Идентификатор внешней АС/ресурсной системы (client_id ). | При получении ID_Token партнеру необходимо сравнить значение aud со значением своего client_id . Если значения не совпадают, то партнер должен завершить сценарий без авторизации клиента на своем ресурсе. |
4 | exp | Время, до наступления которого гарантируется неизменность информации о клиенте в составе ID Token. | |
5 | iat | Время формирования ID Token. | |
6 | auth_time | Время аутентификации клиента в АС Банка при запросе кода авторизации. | |
7 | nonce | Значение переменной, сгенерированная ресурсной системой/внешней АС для предотвращения атак повторения при запросе кода авторизации. | Партнер получив ID_Token должен проверить значение параметра nonce, что полученное значение nonce равно значению параметра nonce, отправленного в запросе на аутентификацию. Если значения не совпадают, то Партнер должен завершить сценарий без авторизации клиента на своем ресурсе. |
Мэтчинг учетных записей
После получения идентификатора в Сбер ID (sub в ID Token) рекомендуется следующий сценарий:
- Партнер ищет у себя учетную запись (по sub из ID Token), к которой привязан Сбер ID
- Если такая учетная запись найдена по sub, Партнер аутентифицирует Клиента
- Если такой учетной записи не найдено, то Партнер может попробовать поискать учетную запись Клиента по данным, полученным через Сбер ID (например, адрес электронной почты, номер телефона и т.д.)
Если такая учетная запись найдена (по дополнительным данным), Партнер предлагает Клиенту привязать ее к уже существующей. Клиент может пропустить этот шаг. В случае, если клиент пропускает этот шаг, то Партнер аутентифицирует Клиента.
Если такой учетной записи не найдено, Партнер аутентифицирует Клиента