en

OAuth-приложение

В репозиториях SDK Axios и SDK Fetch есть серверный пример: подключение проекта через OAuth с PKCE, сохранение токена в серверной сессии и чтение информации о проекте. Выберите один из них. Примерам не нужен Passport.

Подготовка

Нужны Git, npm и Node.js, совместимый с engines выбранного SDK. Создайте OAuth-приложение, включите разрешение project:read и настройте адрес возврата http://localhost:3000/auth/streamvi/callback. При подключении выберите учебный проект. Если меняете домен или порт, измените адрес и в настройках приложения, и в .env. Экраны настройки показаны в Настройках.

project:read нужен для запроса информации о проекте. Для других методов выбирайте их разрешения. В этом примере обмен кода использует PKCE и не требует секрета приложения: одноразовый code_verifier остаётся на сервере.

Локальный запуск

Для Axios:

git clone https://github.com/StreamVi/streamvi-sdk.git
cd streamvi-sdk
npm install
cp .env.example .env

Для Fetch клонируйте https://github.com/StreamVi/streamvi-sdk-fetch.git и перейдите в папку streamvi-sdk-fetch. Остальные шаги одинаковые. Это запуск демонстрационного сервера из репозитория. Для установки только клиента в своё приложение используйте инструкции SDK Axios или SDK Fetch.

Заполните .env в корне клонированного SDK:

STREAMVI_CLIENT_ID=YOUR_CLIENT_ID
CALLBACK_URL=http://localhost:3000/auth/streamvi/callback
SESSION_SECRET=YOUR_RANDOM_SESSION_SECRET
PORT=3000

Создайте случайный секрет сессии этой командой и подставьте результат в SESSION_SECRET:

node -e "console.log(require('node:crypto').randomBytes(32).toString('hex'))"
npm run example

Откройте локальную страницу примера и нажмите Connect a project. Не запускайте оба примера на одном порту. Файл .env не добавляйте в Git. Стартовая страница подтверждает запуск сервера; для проверки API завершите подключение и убедитесь, что отображается выбранный проект.

Как проходит подключение

Маршрут /auth/streamvi создаёт одноразовые state и code_verifier. Сервер сохраняет их в сессии на десять минут, а браузер отправляет в кабинет с code_challenge. После выбора проекта и согласия StreamVi возвращает браузер на /auth/streamvi/callback.

Обработчик использует сохранённую попытку только один раз: проверяет срок и state, затем обменивает код с исходным code_verifier. При ошибке или повторном возврате нужно начать подключение заново. Запуск новой попытки заменяет предыдущую. Сам механизм разобран в OAuth.

После успешного обмена сервер сохраняет токен и внутренний ID проекта, затем запрашивает информацию через SDK. Страница показывает название и ID проекта; токен в HTML и логи не выводится.

ФайлНазначение
example/config/oauth.tsstate, PKCE, проверка возврата и обмен кода
example/config/session.tsСерверная сессия
example/routes/index.tsМаршруты подключения, хранение результата и запрос проекта

Перенос в своё приложение

Сессии примера хранятся в памяти и пропадают после перезапуска сервера. Для своего сервера настройте постоянное хранилище сессий, HTTPS и защищённые cookie, свяжите подключение с пользователем вашего приложения. Токен остаётся на сервере. Пример не обновляет его автоматически: при утрате доступа подключитесь повторно.

Пример Passport

Отдельный passport-streamvi-example показывает существующую интеграцию с Passport. В нём результат подключения, включая токен, выводится в ответ и консоль; такой вывод нужно убрать перед использованием в своём приложении. Он также зависит от опубликованного Passport с ограничениями проверки возврата, описанными на странице Passport.

Исправление стратегии уже слито в GitHub. При использовании Passport установите исправленный пакет и настройте сессию, state и PKCE по инструкции библиотеки. Серверные примеры SDK выше выполняют этот обмен напрямую и от Passport не зависят.