Что такое bearer token?
Для чего он нужен, и в каких случаях его использовать, если по-простому?
- Вопрос задан более трёх лет назад
- 94233 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 1
Full-stack developer (Symfony, Angular)
Ответ написан более трёх лет назад
Нравится 2 1 комментарий
tamtakoe @tamtakoe Автор вопроса
Это я читал, но, видимо, суть не ухватил.
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Идентификация пользователей
Какой принцип у авторизации через разные сервисы? Дискорд, Гугл, Фейсбук?
- 1 подписчик
- 24 дек. 2023
- 62 просмотра

- Идентификация пользователей
- +1 ещё
Какая хорошая практика работы с API с JWT?
- 2 подписчика
- 15 дек. 2023
- 131 просмотр

- Идентификация пользователей
Как называется OTP без необходимости перепечатывания цифр и какой есть клиент для смартфонов?
- 1 подписчик
- 08 дек. 2023
- 47 просмотров

- API
- +4 ещё
Почему fetch отдаёт 401 при JWT авторизации на сервер asp.net core web api?
- 2 подписчика
- 28 нояб. 2023
- 99 просмотров

- Парсинг
- +1 ещё
Python Requests авторизация на сайте, как получить значения которые генирируются js?
- 1 подписчик
- 12 нояб. 2023
- 103 просмотра

- Идентификация пользователей
- +1 ещё
Как правильно проверять и обновлять refresh jwt?
- 1 подписчик
- 08 нояб. 2023
- 118 просмотров

- Веб-разработка
- +1 ещё
Нормальна ли практика идентефикации юзера по почте при условии того что провайдеров для логина больше одного?
- 1 подписчик
- 07 нояб. 2023
- 94 просмотра

- Идентификация пользователей
Что означают такие параметры при авторизации на сайте? Как перейти дальше на главную страницу при помощи python requests?
- 1 подписчик
- 04 нояб. 2023
- 60 просмотров

- Go
- +1 ещё
Как настроить OIDC в Minio для ory hydra?
- 1 подписчик
- 02 нояб. 2023
- 82 просмотра

- Идентификация пользователей
- +1 ещё
Каким способом лучше хранить access и refresh токены?
- 2 подписчика
- 24 окт. 2023
- 95 просмотров
от 100 000 до 110 000 ₽
08 янв. 2024, в 20:24
3000 руб./за проект
08 янв. 2024, в 20:10
500 руб./за проект
08 янв. 2024, в 19:59
50000 руб./за проект
Минуточку внимания
Присоединяйтесь к сообществу, чтобы узнавать новое и делиться знаниями
- Как изменить цвет svg заливки?
- 2 подписчика
- 0 ответов
- 4 подписчика
- 3 ответа
- 2 подписчика
- 0 ответов
- 2 подписчика
- 2 ответа
- 3 подписчика
- 1 ответ
- 3 подписчика
- 0 ответов
- 2 подписчика
- 0 ответов
- 2 подписчика
- 5 ответов
- 2 подписчика
- 3 ответа
- 2 подписчика
- 1 ответ
Авторизация
Токен – это специальный набор символов, представляющий собой зашифрованную информацию о владельце и прочей необходимой для авторизации в OpenAPI информации.
Существует два вида токенов:
- Токен для работы с песочницей
- Токен для полнофункциональной работы с Тинькофф Инвестиции
Получение токена
- Зайдите в свой аккаунт на https://tinkoff.ru/
- Перейдите в раздел инвестиций
- Перейдите в настройки
- Функция «Подтверждение сделок кодом» должна быть отключена
- Выпустите токен OpenAPI для биржи и Sandbox. Возможно, система попросит вас авторизоваться еще раз. Не беспокойтесь, это необходимо для подключения робота к торговой платформе.
- Скопируйте токен и сохраните его. Токен отображается только один раз, просмотреть его позже не получится. Тем не менее вы можете выпускать неограниченное количество токенов.
Срок жизни токена
Срок жизни токена составляет три месяца с даты последнего использования.
Отзыв токена
Отозвать токен OpenAPI можно на странице https://id.tinkoff.ru/account
Обратите внимание, что после отзыва токена REST-методы OpenAPI могут оставаться доступны в течение 10 минут, а stream-соединения останутся активны до разрыва.
Выполнение запросов
Чтобы выполнить запрос в OpenAPI вам необходимо передавать токен при каждом вызове в HTTP-заголовке, либо в заголовке запроса подключения в случае streaming-протокола.
Authorization: Bearer
package main import ( "encoding/json" "fmt" "io/ioutil" "log" "net/http" "strings" "time" ) const ( token = "just_place_token_here" timeout = time.Second * 3 url = "https://api-invest.tinkoff.ru/openapi/sandbox/sandbox/register" ) func main() < client := &http.Client< Timeout: timeout, >req, err := http.NewRequest("POST", url, nil) if err != nil < log.Fatalf("Can't create register http request: %s", err) >req.Header.Add("Authorization", "Bearer "+token) resp, err := client.Do(req) if err != nil < log.Fatalf("Can't send register request: %s", err) >defer resp.Body.Close() if resp.StatusCode != http.StatusOK < log.Fatalf("Register, bad response code '%s' from '%s'", resp.Status, url) >respBody, err := ioutil.ReadAll(resp.Body) if err != nil < log.Fatalf("Can't read register response: %s", err) >type Register struct < TrackingID string `json:"trackingId"` Status string `json:"status"` >var regResp Register err = json.Unmarshal(respBody, ®Resp) if err != nil < log.Fatalf("Can't unmarshal register response: '%s' \nwith error: %s", string(respBody), err) >if strings.ToUpper(regResp.Status) != "OK" < log.Fatalf("Register failed, trackingId: '%s'", regResp.TrackingID) >fmt.Println("Register succeed") >Выпуск Bearer Tokens для POD (Y)
В инструкции описан выпуск Bearer Token используя Curl, Powershell и Postman. Выберите необходимое ПО и выполните одну из инструкций на выбор.
Выпуск Bearer Token для POD (Y) в Postman
Чтобы выпустить Bearer Token для POD (Y) используя Postman, выполните следующие шаги:
- В Postman создайте новый запрос и выберите тип POST .
- Укажите адрес в формате https://vcd[POD_Y].msk.sbercloud.ru/oauth/tenant/[Tenant]/token . На месте [POD_Y] укажите адрес POD (Y), на месте [Tenant] – название тенанта, в который необходимо настроить репликацию. Например: https://vcd12.msk.sbercloud.ru/oauth/tenant/test-client-vcda/token .
- На вкладке Headers добавьте заголовок:
- В поле Key выберите Content-Type .
- В поле Value введите «application/x-www-form-urlencoded».
Выпуск Bearer Token для POD (Y) в Curl
Чтобы выпустить Bearer Token для POD (Y) используя Curl, выполните следующую команду:
curl -X POST https://vcd[POD_Y].sbercloud.ru/oauth/tenant/[Tenant]/token -d 'grant_type=refresh_token&refresh_token=xxxxxxxxxxxxxxxxx' -v -H'Content-Type: application/x-www-form-urlencoded'
На месте [POD_Y] укажите адрес POD (Y), на месте [Tenant] – название тенанта, в который необходимо настроить репликацию. На месте xxxxxxxxxxxxxxx укажите Access Token.
При успешном выполнении запроса сервер выдает в ответе токен.
Выпуск Bearer Token для POD (Y) в PowerShell
Чтобы выпустить Bearer Token для POD (Y) используя PowerShell, выполните следующую команду:
(Invoke-WebRequest -Uri https://vcd[POD_Y].sbercloud.ru/oauth/tenant/[Tenant]/token -Method POST -Body 'grant_type=refresh_token&refresh_token=xxxxxxxx' -Headers @'Content-Type' = 'application/x-www-form-urlencoded'>).Content
На месте [POD_Y] укажите адрес POD (Y), на месте [Tenant] – название тенанта, в который необходимо настроить репликацию. На месте xxxxxxxxxxxxxxx укажите Access Token.
При успешном выполнении запроса сервер выдает в ответе токен.
Access Token, Refresh Token
Ресурс /v2/oauth/token используется для получения Access Token.
Перед использованием ресурса /v2/oauth/token необходимо получить сертификаты и настроить TLS соединение.
Host и полный url для вызова ресурса на тестовом и промышленном контурах см. в разделе URL для вызова API СберБизнес ID.
Ресурс /v2/oauth/token позволяет получать Access Token путем обмена кода авторизации (см. получение кода авторизации в разделе Authorization code или токена обмена (Refresh Token), который предоставляется вместе с Access Token.
Направления взаимодействия, описанные в разделе, выделены на схеме красным.
При запросе ресурса /v2/oauth/token используются параметры, полученные при регистрации приложения Партнера.
Параметры запроса Access Token
Параметры, которые необходимо передавать при вызове ресурса /v2/oauth/token при запросе Access Token.
Параметр Описание Заголовок Content-Type Обязательный параметр. Должен содержать значение application/x-www-form-urlencoded Accept Необязательный параметр. Если ответ не требуется в зашифрованном виде, то может быть не указан или передан со значением application/json. Если необходимо получить ответ на запрос токена в зашифрованном виде, то необходимо передать параметр со значением application/jose. Параметры запроса (entity body) grant_type Обязательный параметр. Значение должно быть authorization_code code Обязательный параметр. В параметре необходимо использовать значение code полученное Приложением партнера на адрес redirect_uri . Каждый code может быть использован только один раз. Например, если при запросе access_token по коду авторизации была допущена ошибка в каком либо из параметров и передано значение code , то повторное использование данного значения code уже будет недопустимо. client_id Обязательный параметр. Уникальный идентификатор Приложения Партнера, полученный при регистрации приложения. redirect_uri Обязательный параметр.
Должен в точности совпадать со значением переданным ранее при вызове ресурса /v2/oauth/authorize.
Пример:
Если в redirect_uri было указано https://example.ru/auth/login/register , то точно такое же значение должно быть указано при запросе /v2/oauth/token, даже если зарегистрирован redirect_uri = https://example.ru/auth/loginclient_secret Обязательный параметр. Секрет Приложения Партнера, полученный при регистрации приложения. code_verifier Необязательный параметр. Параметр в соответствии с надстройкой PKCE над протоколом OAuth 2.0. Раскодированное значение code_challenge переданное ранее при вызове ресурса /authorize . См. правила формирования параметра в PKCE.
Становится обязательным, если при регистрации приложения настройка PKCE была подключена или при вызове ресурса /authorize параметр code_challenge был передан.Вызов ресурса должен осуществляться только с использованием экранирования специальных символов.
Пример запроса без экранирования
POST /ic/sso/api/v2/oauth/token Host: edupirfintech.sberbank.ru:9443 Content-Type: application/x-www-form-urlencoded Accept: application/json grant_type=authorization_code&code=f710576d-7263-4ec6-a01b-8404aca2850d-1&client_id=999999&client_secret=da658d9360604e41a5bac9611d0f1620&redirect_uri=https://example.ru/login?return_to=settingsПример запроса с экранированием
POST /ic/sso/api/v2/oauth/token Host: edupirfintech.sberbank.ru:9443 Content-Type: application/x-www-form-urlencoded Accept: application/json grant_type=authorization_code&code=f710576d-7263-4ec6-a01b-8404aca2850d-1&client_id=999999&client_secret=da658d9360604e41a5bac9611d0f1620&redirect_uri=https%3A%2F%2Fexample.ru%2Flogin%3Freturn_to%3DsettingsСодержание ответа на запрос Access Token
В теле ответа на запрос Access Token будут содержаться следующие параметры:
Параметр Описание Заголовок ответа Content-Type Если в запросе:
— не был передан заголовок Accept или передан в значении application/json, то в ответе параметр будет содержать значение application/json
— был передан заголовок Accept в значении application/jose, то в ответе будет указано application/jose и полученное тело ответа потребуется расшифровать.
Более подробно о расшифровке ответа, см. в разделе Access Token, Refresh TokenПараметры ответа access_token Авторизационный токен token_type Тип токена. Всегда возвращается значение «Bearer» expires_in Срок жизни токена в секундах.
Срок жизни access_token составляет 60 минут.refresh_token Токен обновления. Используется для обновления Access Token. Подробнее про применение значения refresh_token см. в Параметры запроса на обновление Access Token
Срок жизни refresh_token составляет 180 дней.scope Область сведений (разрешения), до которых разрешен доступ Приложению Партнера. id_token Закодированный в Base64URL набор атрибутов клиента, необходимых для идентификации пользователя. Атрибуты разделены символами «.», каждый необходимо декодировать отдельно. Подробнее о декодировании и параметрах id_token см. в ID Token Пример ответа
HTTP/1.1 200 OK Content-Type: application/json "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": "eyJ0eXAiOiJKV1QiLCJhbGciOiJnb3N0MzQuMTAtMjAxMiJ9.eyJzdWIiOiI1OGMzMzE2ZTBmMDgyYzk1ZjZlZDE1ZGZlNzdmNzZkOTljNjI2ZGVhMmQ4ZTJmZWYyNDcyMzM5Y2QyNzMzNWQzIiwiYXVkIjoiNjMyMjk0IiwiYWNyIjoibG9hLTMiLCJhenAiOiI2MzIyOTQiLCJhdXRoX3RpbWUiOjE2MzE1MzQ1NjIsImFtciI6Intwd2QsIG1jYSwgbWZhLCBvdHAsIHNtc30iLCJpc3MiOiJodHRwOi8vc2J0LW9hZnMtNjM4OjkwODAvaWNkayIsImV4cCI6MTYzMTUzNDkxMSwiaWF0IjoxNjMxNTM0NjExLCJub25jZSI6IjdiZTY2YWM5LWQwN2MtNDk2Ny1hZGVkLWNhMjcwYTI3ZTllOCJ9.B46H281g1HKLnTOxhitBI25zgmEseNyGLp1hFQGPWnZWlv5xAjJhAJSQPTbiseLmX_MVKhaT9Dq3QF2F0fa7Vg" >Параметры запроса на обновление Access Token
При обмене кода авторизации на токен, СберБизнес ID возвращает пару access_token и refresh_token .
Полученный refresh_token применяется для обновления access_token после истечения срока его действия или в случае его компрометации.
При использовании refresh_token формируется новая пара access_token и refresh_token .
При этом использованный refresh_token переводится в статус резервного на 2 часа с момента выпуска новой пары ключей ( access_token/refresh_token ).
Если по каким-то причинам сформированная пара не была получена от банка, то рекомендуется повторно отправить запрос на актуализацию ключей в течение 1 часа от момента отправки первой попытки, используя тот же refresh_token .
Для последующих обновлений ключей доступа необходимо использовать refresh_token из новой пары ключей ( access_token/refresh_token ).
Для обновления access_token по refresh_token , необходимо вызывать ресурс /v2/oauth/token со следующими параметрами:
Параметр Описание Заголовок Content-Type Обязательный параметр. Должен содержать значение application/x-www-form-urlencoded Accept Необязательный параметр. Если ответ не требуется в зашифрованном виде, то может быть не указан или передан со значением application/json. Если необходимо получить ответ на запрос токена в зашифрованном виде, то необходимо передать параметр со значением application/jose. Параметры запроса (entity body) grant_type Обязательный параметр. Значение должно быть refresh_token client_id Обязательный параметр. Уникальный идентификатор Приложения Партнера, полученный при регистрации приложения. refresh_token Обязательный параметр. Значение refresh_token полученное при обмене кода авторизации на access_token client_secret Обязательный параметр. Секрет Приложения Партнера, полученный при регистрации приложения. Пример запроса
POST /ic/sso/api/v2/oauth/token Host: edupirfintech.sberbank.ru:9443 grant_type=refresh_token &refresh_token=03e0be32-e72e-47ec-b740-a00b333a8ac4-1 &client_id=999999 &client_secret=da658d9360604e41a5bac9611d0f1620Содержание ответа на запрос обновления Access Token
Параметры ответа на запрос access_token по refresh_token аналогичны ответу на запрос Access Token по коду авторизации за исключением отсутствия параметра id_token .
Пример ответа
HTTP/1.1 200 OK Content-Type: application/json "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" >Коды возврата
В случае возникновения ошибок при вызове ресурса /v2/oauth/token в ответ будут возвращены следующие параметры:
Параметр Описание error Код возникшей ошибки error_description Описание возникшей ошибки Перечень исключений, которые могут быть возвращены при вызове ресурса /v2/oauth/token :
error error_description Описание причины SSOREQUESTED_FORMAT_NOT_ACCEPTABLE_EXCEPTION В соответствии с текущими настройками сервиса с clientId= необходимо запрашивать ответ в формате JSON Для Приложения Партнера установлен запрет на прием запросов с http-заголовком Accept со значением application/jose invalid_grant Missing grant_type parameter value Не заполнен обязательный параметр grant_type invalid_grant One of the params ( code , refresh_token ) is required at request Не заполнен один из обязательных параметров code или refresh_token unsupported_grant_type Grant type » is not supported» В параметре grant_type указано значение отличное от authorization_code или refresh_token invalid_request Missing parameters: code В параметре grant_type указано значение authorization_code , но отсутствует значение в параметре code invalid_grant Failed to extract shoulder ID from В параметре code указано некорректное значение invalid_request Missing parameters: refresh_token В параметре grant_type указано значение refresh_token , но отсутствует значение в параметре refresh_token invalid_grant Failed to extract shoulder ID from В параметре refresh_token указано некорректное значение unauthorized_client Unknown client_id = » Переданный client_id не зарегистрирован invalid_grant Unknown code = » Не найдено переданное значение code. Например, потому что срок действия кода истек или по данному коду уже осуществлялся вызов. invalid_grant Unknown refresh token = » Не найдено переданное значение refresh_token . Например, потому что срок действия токена истек или по данному токену уже был осуществлен обмен на access_token . invalid_grant Ext service for authz code » is blocked Приложение Партнера зарегистрированное по указанному client_id — заблокировано. unauthorized_client Client » is blocked Приложение Партнера зарегистрированное по указанному client_id — заблокировано. invalid_grant Invalid credentials for authz code » При запросе access_token по коду авторизации указан неверный c lient_secret` invalid_grant Invalid credentials for refresh_token » При запросе access_token по refresh_token указан неверный client_secret invalid_request Missing parameters: Отсутствует параметр redirect_uri invalid_grant Redirect uri » is invalid Переданный параметр redirect_uri не совпадает со значением полученным ранее при запросе кода авторизации invalid_request client secret expired Истек срок действия client_secret invalid_request Code verifier required При запросе кода авторизации был указан code_challenge , но в параметрах запроса токена отсутствует параметр code_verifier invalid_request Invalid code verifier Значение code_verifier не отвечает параметрам протокола PKCE invalid_grant Failed to verify code verifier Хешированное значение code_challenge , полученное в запросе /authorize не совпадает со значением полученным в параметре code_verifier Также могут быть получены следующие параметры в ответе при обращении к серверу:
Параметр Описание errorCode Код возникшей ошибки errorMsg Описание возникшей ошибки Данный тип параметров возвращается, если на сервере возникли следующие исключения:
http-code errorCode/errorMsg Описание причины 403 requestForbidden ID Token
- Является основным расширением, которое спецификация OpenID Connect накладывает на протокол OAuth 2.0 и добавляется в ответ на запрос Access Token, если в состав scope включено значение openid;
- Является токеном безопасности и содержит информацию об аутентификации пользователя с использованием СберБизнес ID для входа в Приложение Партнера;
- Представляет собой JSON Web Token (JWT).
В соответствии со спецификации JSON Web Token (JWT) ID Token представлен структурой вида:
- Алгоритм подписи и тип токена (Header);
- Полезная нагрузка (Payload);
- Электронная подпись (Signature).
Каждая часть ответа, разделенная точкой должна декодироваться отдельно. Для декодирования ID Token следует воспользоваться алгоритмом Base64URL Encoding. Для проверки подписи в поле id_token на стороне Приложения Партнера, необходимо вычислить подпись публичным ключом Банка, декодировав блок Header и Payload по Base64URL (содержимое между двумя точками). Далее необходимо сравнить полученное значение c блоком Электронная подпись (содержимое после второй точки), декодированным по Base64URL.
Пример ID Token
eyJ0eXAiOiJKV1QiLCJhbGciOiJ nb3N0MzQuMTAtMjAxMiJ9.eyJzd WIiOiJmYWQ0YjYzMThiNjYyZDIx YjJlMTk2ZWJlYjBmMDhYWI3NDJj NGYzYmFhMmUxZTE1ZGNhNjkwZmM YjJkYTkwIiwiYXVkIjoiMTExMjk 2IiwiYWNyIjoibG9hLTMiLCJhen AiOiIxMTEyOTYiLCJhdXRoX3Rpb WUiOjE2MzExNjcxNjgsImFtciI6 Intwd2QsIG1jYSwgbWZhLCBvdHA sIHNtc30iLCJpc3MiOiJodHRwO 8vc2J0LW9hZnMtNjM4OjkwODAva WNkayIsImV4cCI6MTYzMTE2NzUy NywiaWF0IjoxNjMxMTY3MjI3LCJ b25jZSI6IjdiZTY2YWM5LWQwN2M tNDk2Ny1hZGVkLWNhMjcwYTI3ZT llOCJ9.NnGurMyyyket3i9TkyRx LRbllZTxfqNJfrDhNXy7N_B5BbE fj3kdxKxaDMChug2MXflrbzn7WY SbSPV6H_KjugЗаголовок. Алгоритм и тип токена
< "sub": "fad4b6318b662d21b2e196ebeb0f02aab742c4f3baa2e1e15dca690fc3b2da90", "aud": "111296", "acr": "loa-3", "azp": "111296", "auth_time": 1631167168, "amr": "", "iss": "http://sbt-oafs-638:9080/icdk", "exp": 1631167527, "iat": 1631167227, "nonce": "7be66ac9-d07c-4967-aded-ca270a27e9e8" >По умолчанию в ID Token включены следующие параметры:
Параметр Описание Заголовок (Header) typ Тип токена alg Алгоритм шифрования Полезная нагрузка (Payload) acr Уровень аутентификации пользователя:
— acr=loa-2 (пользователь аутентифицируется с помощью устройства защиты)
— acr=loa-3 (пользователь использует подтверждение по одноразовому SMS-паролю для аутентификации)amr Методы аутентификации:
— amr=pwd — пользователь аутентифицируется с помощью устройства защиты;
— amr= — пользователь использует подтверждение по одноразовому SMS-паролю для аутентификацииaud Идентификатор Приложения Партнера, для которого сформирован ID Token auth_time Время аутентификации пользователя в СберБизнес ID. Формат поля Unix time azp Идентификатор Приложения Партнера, для которого сформирован ID Token exp Время, после которого ID Token не принимается для обработки. Формат поля Unix time iat Время формирования ID Token. Формат поля Unix time iss URL сервиса, сформировавшего ID Token nonce Значение параметра nonce, полученного при запросе авторизации sub Уникальный идентификатор пользователя Электронная подпись (Signature) Массив байт электронной подписи Проверка электронной подписи, полученной в ID Token (содержимое ответа ID Tokena после второй точки), выполняется, используя алгоритм, указанный в параметре заголовка JWT alg. Если при формировании ID Token, какой-либо параметр не может быть заполнен, то такой параметр не будет включен в ответ.
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.