HTTP API

Обновлено:

Для подключения клиентских приложений (Web, iOS, Android, Desktop) к Slyber Turn Server необходимо передать в WebRTC RTCPeerConnection список URI серверов и временные username/password. Сделать это можно двумя способами: через встроенное HTTP API.

Способ 1. Получение доступов через HTTP API

Запрос: GET /api/turn-credentials

Параметры URL (Query Parameters):

  • user_id (опционально) — строковый идентификатор пользователя для аналитики и логов (если не указан, генерируется anonymous_<nanoseconds>).
  • ttl (опционально) — желаемое время жизни токена в секундах (без заголовка X-Turn-Secret значение не может превышать CREDENTIAL_TTL_SEC из настроек сервера).

Заголовки (Headers):

  • X-Turn-Secret: <ваш_секрет> или Authorization: Bearer <ваш_секрет> (обязателен при REQUIRE_SECRET=true).
  • Origin: https://your-domain.com (проверяется при вызове напрямую из браузера).

Пример запроса (curl):

Bash
curl -s "http://127.0.0.1:8080/api/turn-credentials?user_id=user_42&ttl=3600" \
     -H "X-Turn-Secret: your-super-secret-turn-key-12345"

Пример ответа (200 OK):

JSON

JSON
{
  "username": "1761583600:user_42",
  "password": "K8x9pL2mQ4vR7wT1yZ3aB5cD8eF=",
  "ttl": 3600,
  "uris": [
    "stun:203.0.113.1:3478",
    "turn:203.0.113.1:3478?transport=udp",
    "turn:203.0.113.1:3478?transport=tcp",
    "turns:rtc.example.com:5349?transport=tcp"
  ]
}
Примечание: URI turns:... автоматически добавляется в ответ, если на сервере включен TLS; при этом если задан файл сертификата и кастомный REALM (отличный от turn.local), в turns: автоматически подставляется доменное имя из REALM.

Пример подключения в браузере (JavaScript / WebRTC):

JavaScript
async function createPeerConnection(userId) {
  // 1. Запрашиваем временные учетные данные TURN
  const res = await fetch(`https://turn.example.com:8080/api/turn-credentials?user_id=${encodeURIComponent(userId)}`);
  if (!res.ok) throw new Error('Failed to fetch TURN credentials');
  const turnConfig = await res.json();

  // 2. Передаем полученные URI, username и password в RTCPeerConnection
  const pc = new RTCPeerConnection({
    iceServers: [
      {
        urls: turnConfig.uris,
        username: turnConfig.username,
        credential: turnConfig.password
      }
    ]
  });

  return pc;
}