wake-up-neo.net

CoTURN: Verwendung von TURN REST API?

Ich habe Coturn erstellt und erfolgreich ausgeführt. ip: 192.168.1.111. Nun stellte sich die Frage, ob ich den Turn-Berechtigungsnachweis über die REST-API erhalten soll. http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00 Entsprechend der Passage sollte das Anfrageformat sein

GET /?service=turn&username=mbzrxpgjys

und die Antwort sollte JSON sein. Jetzt ist meine Frage:

a) Wie konfiguriere und befehle ich TURN SERVER, damit es im REST API Modus läuft?

b) Wie schreibe ich eine http-Anfrage im richtigen Format, damit TURN SERVER richtig antworten kann? kannst du mir ein beispiel geben

12
LoveLxr

Einige Dinge, die hier geklärt werden müssen, sind:

  • GET /?service=turn&username=mbzrxpgjys, der einen JSON zurückgibt, ist nur ein empfohlener uri zum Abrufen von zeitlich begrenzten TURN-Anmeldeinformationen vom Server. Sie müssen dem nicht folgen. Ihr uri kann nur /?giveMeCredentials sein. Tatsächlich verwende ich meine Socket-Verbindung, um diese Daten abzurufen, und nicht, um einen HTTP-Aufruf mit JSON-Antwort zu tätigen. Am Ende des Tages spielt es keine Rolle, wie Sie (der Client, der TURN verwendet) diese Anmeldeinformationen erhalten, solange sie gültig sind.

  • Sie stellen keine direkten Anfragen an den TURN-Server. no rest api Der Aufruf des TURN-Servers unterliegt Ihrer Kontrolle.

  • wenn Sie einen geheimen Schlüssel zuweisen, wenn Sie den TURN-Server starten, kann dieser einer Datenbank entnommen werden (also dynamisch änderbar), aber faul, dass ich nur fest codiert bin und ihn in der Turn-Konfigurationsdatei angegeben habe, denken Sie auch daran, ihn zu aktivieren REST API. Als Teil des Befehls turn turnserver ... --use-auth-secret --static-auth-secret=MySecretKey

  • Jetzt würden Sie auf Ihrem Anwendungsserver denselben geheimen Schlüssel verwenden, um Anmeldeinformationen zu generieren. Für den Benutzernamen sind dies der UNIX-Zeitstempel und eine durch : getrennte Zeichenfolge (die zufällig oder eine Benutzer-ID oder etwas anderes sein kann). Das Kennwort lautet dann HMAC des Benutzernamens mit deinem geheimen Schlüssel.

  • für den UNIX-Zeitstempel ist dies die Zeit auf dem TURN-Server, bis zu der Ihre Anmeldeinformationen gültig sein müssen. Bei der Berechnung dieser Zeit müssen Sie also den Zeitunterschied zwischen Ihrem Anwendungsserver und Ihrem Turn-Server berücksichtigen.

Nun ein Beispielcode aus meiner Antwort auf eine andere Frage

befehl zur Angabe des TURN-Servers:

turnserver -v --syslog -a -L xx.xxx.xx.xx -X yy.yyy.yyy.yy -E zz.zzz.zz.zzz --max-bps=3000000 -f -m 3 --min-port=32355 --max-port=65535 --use-auth-secret --static-auth-secret=my_secret --realm=north.gov --cert=turn_server_cert.pem --pkey=turn_server_pkey.pem --log-file=stdout -q 100 -Q 300 --cipher-list=ALL

node.js code zum Erstellen von TURN-Anmeldeinformationen auf dem Anwendungsserver:

var crypto = require('crypto');

function getTURNCredentials(name, secret){    

    var unixTimeStamp = parseInt(Date.now()/1000) + 24*3600,   // this credential would be valid for the next 24 hours
        username = [unixTimeStamp, name].join(':'),
        password,
        hmac = crypto.createHmac('sha1', secret);
    hmac.setEncoding('base64');
    hmac.write(username);
    hmac.end();
    password = hmac.read();
    return {
        username: username,
        password: password
    };
}

Browser-Code für diese Verwendung:

  ...
  iceServers:[
    {
      urls: "turn:turn_server_ip",
      username: username,
      credential:password
    }
  ...
23
mido

Ich bin vor kurzem auf ein ähnliches Problem gestoßen (da ich die REST -API mit dem TURN-Server verwendet habe) und habe festgestellt, dass der TURN-Server die REST -API-Aufrufe überhaupt nicht unterstützt und nur ein Authentifizierungsformat mit unterstützt Shared Secret, wenn die API-Unterstützung für REST in der TURN-Konfiguration aktiviert wird. Der Entwurf enthält nur Informationen zu Dingen, die wir bei der Implementierung einer solchen REST-API berücksichtigen müssen, und WE müssen die API selbst erstellen oder etwas wie turnhttp verwenden , um die Kombination aus temporärem Benutzernamen und Kennwort zu generieren.

Wie in @mido ausführlich beschrieben, können Sie den Teil zur Erzeugung von Benutzernamen und Passwort in der Anwendung selbst implementieren. Aber wenn Sie Gründe haben, dies von der Anwendung zu trennen und es als einen völlig anderen API-Dienst implementieren möchten, anstatt eine vollständige API gemäß dem Draft zu implementieren, bin ich auf ein anderes Post gestoßen, in dem das OP hat ein PHP Skript bereitgestellt, um einen temporären Benutzernamen und ein temporäres Passwort zu generieren. Dieses funktioniert ziemlich gut, wenn Sie die Funktion hash_hmac () folgendermaßen modifizieren:

$turn_password = hash_hmac('sha1', $turn_user, $secret_key, true);

Wir müssen die RAW-Ausgabe von hash_hmac mit base64 codieren, damit sie funktioniert, und ich glaube, dass dies der Grund ist, warum sie für das OP in diesem Link nicht funktioniert hat.

Sie sollten in der Lage sein, die Authentifizierung mit dem Befehl turnutils_uclient zu testen, um sicherzustellen, dass die Kombination aus temporärem Benutzernamen und Kennwort wie erwartet funktioniert.

turnutils_uclient -y -u GENERATED_USERNAME -w GENERATED_PASSWORD yourturnserver.com

Nachdem Sie die Authentifizierung überprüft und bestätigt haben, dass sie funktioniert, können Sie den Webserver für das Skript PHP einrichten, um es für Ihre Anwendung verfügbar zu machen und die temporäre Kombination aus Benutzername und Kennwort abzurufen. Außerdem müssten Sie andere Sicherheitseinstellungen (Authentifizierung) implementieren, um die API vor unbefugtem Zugriff zu schützen.

Ich weiß, dass dies ein alter Beitrag ist. Ich teile hier nur meine Erkenntnisse in der Hoffnung, dass er eines Tages für jemanden nützlich sein wird.

0
SparX

Nach (vielen) Stunden der Frustration war @ Midos exzellente Antwort hier das einzige, was CoTurns REST API tatsächlich zum Laufen brachte.

Mein Anmeldeinformationsserver ist PHP und ich verwende CoTurns Konfigurationsdatei 'turnserver.conf'. Hier ist eine getestete und funktionierende Übersetzung seiner Arbeit für diese Situation:

Unter der Annahme eines "gemeinsamen Geheimnisses" von "3575819665154b268af59efedee8826e" sind hier die relevanten turnserver.conf-Einträge:

lt-cred-mech
use-auth-secret
static-auth-secret=3575819665154b268af59efedee8826e

... und das PHP (das mich ewig irregeführt hat):

$ttl = 24 * 3600;  // Time to live
$time = time() + $ttl;
$username = $time . ':' . $user;
$password = base64_encode(hash_hmac('sha1', $username, '3575819665154b268af59efedee8826e', true));
0
HeyHeyJC