Как получить токены по Code Flow
Первичное получение токенов
Выполните последовательно два запроса:
- запрос параметров
stateиcode— они потребуются при запросе токенов, - запрос токенов.
Запрос параметров code и state
Чтобы перейти по адресу сервиса Райффайзен Банка на точку доступа /authorize, отправьте GET-запрос формата:
GET https://sso.rbo.raiffeisen.ru/authorize?scope=openid profile email phone&client_id={your_client_id} &response_type=code&redirect_uri={your_redirect_uri}&state={your_state}&nonce={your_nonce}&prompt=login&code_challenge={your_code_challenge}&code_challenge_method=S256Описание параметров
| Параметр | Обязательность | Описание |
|---|---|---|
| scope | Да | Статичное значение openid profile email phone |
| client_id | Да | Идентификатор системы, полученный от банка после подачи заявления на подключение |
| response_type | Да | Статичное значение code |
| redirect_uri | Да | URI, указанный при подключении (можно изменить в онлайн-банке, в разделе Интеграции) |
| state | Да | Параметр случайно генерирует ваша система. Сервис Райффайзен Банка возвращает его в ответе неизмененным. Система должна проверить, соответствует ли полученный в ответе параметр исходному значению. Параметр нужен, чтобы избежать подделки межсайтовых запросов (CSRF) |
| nonce | Нет | Опциональный параметр, случайно генерируемый вашей системой. Сервис Райффайзен Банка вернет его неизмененным в ответе внутри токена. Необходим, чтобы предотвращать атаки с повторным использованием токена |
| prompt | Нет | Опциональный параметр, указывает на тип взаимодействия пользователя и сервиса Райффайзен Банка. Статичное значение login |
| code_challenge | Да | Параметр, полученный из code_verifier — криптографической случайно сгенерированной строки: code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) Подробнее о том, как создать code_challenge — Proof Key for Code Exchange (PKCE) |
| code_challenge_method | Да | Статичное значение S256 |
| max_age | Нет | Время в секундах, на которое будет выдан токен (максимально на 24 часа или 86400 секунд) |
После выполнения запроса вы перейдете на страницу с формой ввода логина и пароля конечного пользователя:
Введите логин и пароль онлайн-банка и нажмите «Войти». Вы перейдете по Redirect URI вашей системы, параметры code и state будут подставлены в ответ автоматически. При успешной авторизации вернется ответ со статусом 303 и заголовком:
Location: {your_redirect_uri}?code={your_code}&state={your_state}Значение code — это Authorization Code, он понадобится на следующем шаге.
Запрос токенов доступа
В запросе токенов используйте Basic Authentication.
Перед запросом сгенерируйте Authorization Basic строку. Значение заголовка Authorization формируется из client_id и client_secret, разделенных двоеточием и закодированных по алгоритму Base64URL Encode.
Ниже — пример генерации Base64URL для системы, где:
client_id=a12b123b-0a12-3b4c-123a-12a3456789b1client_secret=clientsecret7Fjfp0ZBr1KtDRbnfV
Base64.encode('your_client_id' + ":" + 'your_client_secret') =
YTEyYjEyM2ItMGExMi0zYjRjLTEyM2EtMTJhMzQ1Njc4OWIxOmNsaWVudHNlY3JldDdGamZwMFpCcjFLdERSYm5mVgЧтобы получить токены доступа, отправьте POST-запрос:
POST /token
Host: https://sso.rbo.raiffeisen.ru
Content-Type: application/x-www-form-urlencoded
Authorization: Basic {Authorization Basic}
Body:
grant_type=authorization_code&
client_id={your_client_id}&code={your_code}&
redirect_uri={your_redirect_uri}&
code_verifier={your_code_verifier}
Заголовок Content-Type содержит значение application/x-www-form-urlencoded. Это значит, что тело запроса должно быть составлено в формате ключ=значение с разделителем &. Например так: client_id=my_id&redirect_uri=https%3A%2F%2Fexample.ru%2Fredirect
При использовании CURL тело запроса формируется в таком формате автоматически.
Описание параметров
| Параметр | Обязательность | Описание |
|---|---|---|
| grant_type | Да | Статичное значение authorization_code |
| client_id | Да | Идентификатор системы, полученный от банка после подачи заявления на подключение |
| code | Да | Код, переданный сервисом Райффайзен Банка на redirect_uri |
| redirect_uri | Да | URI, указанный при подключении. |
| code_verifier | Да | Криптографическая случайно сгенерированная строка. Подробнее о том, как создать code_verifier — Proof Key for Code Exchange (PKCE) |
В ответе придут токены в JSON:
{
"access_token": "your_access_token_JWT",
"token_type": "Bearer",
"refresh_token": "your_refresh_token",
"id_token": "your_id_token_JWT"
}Обновление токенов, когда есть Refresh-token
Когда срок действия токена истечет, в ответ на запросы придет HTTP-код 401. В этом случае нужно обновить токен доступа с помощью refresh_token. Для этого нужно отправить POST-запрос:
POST https://sso.rbo.raiffeisen.ru/token
Authorization: Basic {Authorization Basic}
Content-Type: application/x-www-form-urlencoded
Body:
grant_type=refresh_token&
client_id={your_client_id}&
refresh_token={your_refresh_token}
Описание параметров
| Параметр | Обязательность | Описание |
|---|---|---|
| grant_type | Да | Статичное значение refresh_token |
| client_id | Да | Идентификатор системы, полученный от банка после подачи заявки на подключение |
| refresh_token | Да | Токен, использующийся для обновления access_token и id_token |
{
"access_token": "your_access_token_JWT",
"token_type": "Bearer",
"refresh_token": "your_refresh_token",
"id_token": "your_id_token_JWT"
}Инструкция получения токенов по протоколу OpenID Connect 1.0 - Code Flow