Аутентификация
TorrPlay защищает API и стриминг с помощью двух методов аутентификации, которые настраиваются через /api/v1/settings.
По умолчанию аутентификация отключена.
Типы аутентификации
Базовая аутентификация (basic)
Для каждого защищённого запроса к API нужно передавать имя пользователя и пароль в стандартном HTTP-заголовке Authorization: Basic ....
Аутентификация по Bearer-токену (bearer)
Работает на основе JWT (JSON Web Tokens). При обращении к защищённым эндпоинтам токен передаётся в заголовке Authorization: Bearer <token>.
Имя пользователя должно содержать от 4 до 64 символов, пароль — от 4 до 128 символов.
Включение аутентификации
Имя пользователя и пароль требуются для всех защищённых операций API.
curl -X PATCH http://localhost:8090/api/v1/settings \
-H "Content-Type: application/json" \
-d '{
"auth": {
"enabled": true,
"type": "basic",
"username": "your-username",
"password": "your-password"
}
}'Получение токена (Bearer Auth)
Эндпоинт /oauth/token доступен только при включённом режиме bearer:
curl -X POST http://localhost:8090/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=password&username=your-username&password=your-password"Пример ответа:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer"
}Срок действия токена — 24 часа. Эндпоинт выдачи токенов и /api/system/health доступны без аутентификации: так клиент может войти в систему и проверить доступность TorrPlay.
Изменение настроек аутентификации
В ответе GET /api/v1/settings пароль никогда не возвращается. Если вы меняете другие параметры аутентификации и хотите сохранить текущий пароль, не добавляйте поле password в запрос PATCH /api/v1/settings.
Любое изменение настроек аутентификации — включение или отключение защиты, выбор другого типа или смена учётных данных — отзывает все активные токены доступа, воспроизведения и Stremio.
Делегированные токены воспроизведения (Playback Tokens)
Если в TorrPlay включена аутентификация (Basic или Bearer), стриминг (/api/v1/stream/*), генерация плейлистов (/api/v1/playlist) и потоки Stremio также защищаются.
Чтобы подключать внешние плееры (VLC, Infuse, Kodi, Smart TV) без передачи пароля администратора или постоянных JWT-токенов в строке URL, TorrPlay поддерживает делегированные токены воспроизведения:
Создание токена воспроизведения
Эндпоинт: POST /api/v1/tokens
curl -X POST http://localhost:8090/api/v1/tokens \
-H "Authorization: Bearer your-jwt-token" \
-H "Content-Type: application/json" \
-d '{"scope": "playback"}'(При использовании Basic Auth укажите -u your-username:your-password вместо заголовка Bearer).
Пример ответа:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"scope": "playback",
"expires_at": "2026-09-11T16:00:00Z"
}Токен воспроизведения действует 24 часа.
Использование токенов воспроизведения в ссылках
Передайте полученный токен в параметре запроса token:
http://localhost:8090/api/v1/stream/{hash}?path=video.mp4&token=your-playback-token
http://localhost:8090/api/v1/playlist?token=your-playback-tokenImportant
Принцип наименьших привилегий: передача токена в строке запроса (?token=...) работает только для токенов с ролью playback и исключительно при запросах к видеопотокам или плейлистам. Передать административный токен через параметр URL нельзя — сервер отклонит такой запрос, чтобы исключить утечку ключей через журнал прокси или историю браузера.
Выполнение авторизованных запросов к API
С токеном Bearer
Передавайте JWT-токен в заголовке Authorization:
curl -H "Authorization: Bearer your-jwt-token" http://localhost:8090/api/v1/torrentsС Basic Auth
Используйте флаг -u в curl:
curl -u your-username:your-password http://localhost:8090/api/v1/torrentsВосстановление доступа
Если вы забыли учётные данные, аутентификацию можно временно отключить, перезапустив TorrPlay с переменной окружения TORRPLAY_DISABLE_AUTH:
TORRPLAY_DISABLE_AUTH=true ./torrplay --data-dir=./dataЭто откроет полный доступ к API без запроса логина и пароля. Обновите настройки через PATCH /api/v1/settings, затем удалите переменную окружения и перезапустите TorrPlay в обычном режиме.