Coder Social home page Coder Social logo

WebSocket frontend about invest-openapi HOT 23 OPEN

tinkoff avatar tinkoff commented on July 17, 2024 7
WebSocket frontend

from invest-openapi.

Comments (23)

alezhu avatar alezhu commented on July 17, 2024 2

Поддерживаю @mvkasatkin
Как вариант рассмотрите возможность передавать токен в URL или первым сообщением после открытие сокета.

from invest-openapi.

KirillKaverin avatar KirillKaverin commented on July 17, 2024 1

@SergeyBruhanov можете посмотреть в DevTools, ваш токен не передаётся на сервер, как и другие не вебсокет заголовки, поэтому и ошибка. Об этом собственно и тред.

from invest-openapi.

NikitaMelnikov avatar NikitaMelnikov commented on July 17, 2024

Привет!

У нас с предыдущим релизом появился стакан и свечи в REST-протоколе, возможно это сейчас поможет?

from invest-openapi.

mvkasatkin avatar mvkasatkin commented on July 17, 2024

@NikitaMelnikov, да, свечами, конечно, на данный момент можно решить вопрос. Но, получив определенные исторические данные, далее хотелось бы получать ивенты об изменении цены и просто обновлять локальную коллекцию, а не самому переполучать данные с определенным интервалом :) Так что, надеюсь, этот enhancement произойдет:)

from invest-openapi.

mvkasatkin avatar mvkasatkin commented on July 17, 2024

Кстати, для RestAPI включили CORS, что теперь тоже исключает возможность обращения к апи через браузер (без определенных приседаний). Есть ли в этом смысл? Локальные роботы вполне способны работать внутри браузера с использованием indexedDB, имея при этом визуализацию и отсутствие необходимости тянуть за собой и поддерживать излишний бэкенд.
Но на данный момент CORS и WebSocket header auth мешают этому, без видимых на то причин. Было бы здорово, если данный вопрос будет решен.

from invest-openapi.

NikitaMelnikov avatar NikitaMelnikov commented on July 17, 2024

@mvkasatkin cors всегда включены были, но они именно включены, т.е. разрешены. Иначе сваггер бы не работал

from invest-openapi.

mvkasatkin avatar mvkasatkin commented on July 17, 2024

@NikitaMelnikov стоит ли ожидать альтернативный способ передачи токена через browser websocket (который не поддерживает кастомные заголовки)?

from invest-openapi.

NikitaMelnikov avatar NikitaMelnikov commented on July 17, 2024

Пока что не смогли реализовать безопасный способ передачи авторизационных параметров в query.
Рекомендую пока что поднять локальный сервер на nodejs и проходить авторизацию через query в нем

from invest-openapi.

mvkasatkin avatar mvkasatkin commented on July 17, 2024

@NikitaMelnikov пока так и приходится делать. Но nodejs тут лишь костыль( Очень надеемся, что решение с авторизацией будет найдено. Как вариант, токен может быть передан единоразово, допустим с message auth. Далее на стороне сервера соединение будет считаться авторизованным.

from invest-openapi.

SergeyBruhanov avatar SergeyBruhanov commented on July 17, 2024

Тоже очень критичная проблема, хотелось бы получить решение.
Может как-то связать авторизацию, которая прошла по https, и у вас на сервере на определенное время она будет считаться как пройденной и для websocket ?

from invest-openapi.

NikitaMelnikov avatar NikitaMelnikov commented on July 17, 2024

Может как-то связать авторизацию, которая прошла по https, и у вас на сервере на определенное время она будет считаться как пройденной и для websocket ?

Из-за технических особенностей такое невозможно

from invest-openapi.

SergeyBruhanov avatar SergeyBruhanov commented on July 17, 2024

Пробую передать токен следующим образом

<script>

ws = new WebSocket('wss://api-invest.tinkoff.ru/openapi/md/v1/md-openapi/ws', null, { headers: { Authorization: МОЙ_ТОКЕН}});

ws.onopen = function() { alert("Connection opened...") };
ws.onclose = function() { alert("Connection closed...") };
ws.onmessage = function(evt) { $("#msg").append("

"+evt.data+"

"); };

</script>

Ошибка: Invalid or unexpected token

from invest-openapi.

YuriyIlyin avatar YuriyIlyin commented on July 17, 2024

ws = new WebSocket('wss://api-invest.tinkoff.ru/openapi/md/v1/md-openapi/ws', null, { headers: { Authorization: МОЙ_ТОКЕН}});

Authorization: "Bearer " + token
https://tinkoffcreditsystems.github.io/invest-openapi/auth/

from invest-openapi.

alezhu avatar alezhu commented on July 17, 2024

@SergeyBruhanov

<script> ws = new WebSocket('wss://api-invest.tinkoff.ru/openapi/md/v1/md-openapi/ws', null, { headers: { Authorization: МОЙ_ТОКЕН}});

Браузерный WebSocket принимает 1-2 параметра. И заголовки к нему не добавить. Об этом, собственно, и тред.

from invest-openapi.

SergeyBruhanov avatar SergeyBruhanov commented on July 17, 2024

В третьем параметре же можно передать любые значения
Пробую так

<script> Token = "МОЙ_ТОКЕН"; ws = new WebSocket('wss://api-invest.tinkoff.ru/openapi/md/v1/md-openapi/ws', null, { headers: { Authorization: "Bearer "+ Token}}); </script>

Ошибка: Authentication failed; no valid credentials available

Может дополнительные параметры заголовка не проверяются у Тинькофф ?

from invest-openapi.

nonamegithub avatar nonamegithub commented on July 17, 2024

JS WebSocket в браузерах не поддерживает передачу заголовков, в отличии от NodeJS, а соответственно, нет возможности передать токен.

Один заголовок все-таки передается - Sec-WebSocket-Protocol. Может в нем передавать, если использование не по назначению этого заголовка не критично со стороны Тинькова?

from invest-openapi.

bymagnum avatar bymagnum commented on July 17, 2024

Вопрос актуален насчет браузерного доступа к API

from invest-openapi.

nonamegithub avatar nonamegithub commented on July 17, 2024

У разрабов тинькова похоже проблемы с английским - не удостоили даже ответом, поэтому теперь подкидываю ссылку с идеей на русском.
Токен отлично передается во втором аргументе - опробовал лично. Задача тиньковских спецов забрать его из Sec-WebSocket-Protocol и провести его авторизацию.
Итак, вопрос: что мешает немного откостылить ваш бэкенд? Web socket прокси на node js как пятое колесо в телеге...

from invest-openapi.

polkila avatar polkila commented on July 17, 2024

Коллеги и разработчики! Зачем нужна авторизация для получения общедоступных данных (стакан, свечи, статус)?

from invest-openapi.

fly3110 avatar fly3110 commented on July 17, 2024

Коллеги и разработчики! Зачем нужна авторизация для получения общедоступных данных (стакан, свечи, статус)?

Потому что. Меня тоже этот вопрос беспокоит. Как и стабильность работы вебсокета. Бывает, что соединение висит, а сообщения перестают приходить. Приходится вешать таймер и перезапускать соединение. И все снова начинает доставляться

from invest-openapi.

mvkasatkin avatar mvkasatkin commented on July 17, 2024

Коллеги и разработчики! Зачем нужна авторизация для получения общедоступных данных (стакан, свечи, статус)?

А с чего вы решили, что realtime-данные общедоступные?

Если по делу, то попробуйте распределить подписки по доступным 6 соединениям на пользователя и организовать на своей стороне keep-alive, reconnect + resubscribe (в случае потери связи). Более года все работает стабильно 99.9% времени.

from invest-openapi.

bymagnum avatar bymagnum commented on July 17, 2024

Коллеги и разработчики! Зачем нужна авторизация для получения общедоступных данных (стакан, свечи, статус)?

Такие данные как правило отдаются только с ключами API, и\или авторизацией. Просто так данные не возможно отдавать, дабы существуют на линии дорогостоящие проекты, которые будут висеть на шаре, которые будут топить канал... таких вариантов масса.

from invest-openapi.

AlexanderVolkovTCS avatar AlexanderVolkovTCS commented on July 17, 2024

Зачем нужна авторизация для получения общедоступных данных

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

from invest-openapi.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.