Kennisbank

1.000 veelgestelde vragen, 500 tutorials en uitlegvideo's. Hier vind je alleen maar oplossingen!

Beveilig een audiostream met een unieke sleutel (token)

Deze handleiding legt uit hoe u de controle behoudt over uw streamingradio-MP3/AAC- of HLS-streams door bescherming in te schakelen met een unieke token, zodat u bijvoorbeeld kunt bepalen of een luisteraar uw radio kan beluisteren of niet.

 

Inleiding

  • Bij elke verbinding stuurt u een verzoek naar de Infomaniak-API, die u vervolgens een unieke token terugstuurt met een beperkte en configureerbare geldigheidsduur.
  • Deze token stelt iedereen die de token heeft in staat om de stream gedurende deze periode te gebruiken.
  • U kunt een MP3/AAC- of HLS-stream onafhankelijk van elkaar beveiligen (net als de geolocatie, trouwens).
  • Het inschakelen van de beperking vereist een wijziging van de streamconfiguratie, waarvoor enkele minuten nodig kunnen zijn om op de servers te worden doorgevoerd.

 

Een audiostream beveiligen met een unieke sleutel

Hiervoor hoeft u alleen naar de beperkingsparameters te gaan en de tokenbeveiliging in te schakelen voor de stream die u wilt beveiligen:

  1. Klik hier om toegang te krijgen tot het beheer van uw product in de Infomaniak Manager (Hulp nodig?).
  2. Klik rechtstreeks op de productnaam die aan het betreffende product is toegewezen:
  3. Klik op:
    1. ofwel op de naam van de radio:
    2. of op Beperkingen in het linkermenu om beperkingen voor het hele product toe te passen:
  4. Als u de bovenstaande optie a selecteert, klikt u vervolgens op Beperkingen in het linkermenu.
  5. Selecteer indien nodig HLS.
  6. Klik op het actiemenu rechts naast het betreffende item.
  7. Klik op Tokenbeperking:

Activeer vervolgens de beveiliging.

Let op: als u deze optie activeert, wordt de toegang tot de stream onmiddellijk geblokkeerd voor nieuwe verbindingen. Pas uw spelers aan om rekening te houden met de beperking, zoals in het volgende voorbeeld wordt weergegeven:

 

API-Radio-Token erstellen

Om toegang te krijgen tot de radio-API, moet u zich eerst authenticeren met een applicatietoken. Deze stap hoeft slechts één keer te worden uitgevoerd. Om dit applicatietoken te maken, kunt u deze andere handleiding raadplegen.

De scope is radio en de levensduur is onbeperkt, om te voorkomen dat u regelmatig een code moet regenereren. Zodra het token is gegenereerd, kopieert u het en plakt u het in het onderstaande voorbeeld.

 

Voorbeeld van gebruik in de programmeertaal PHP

Voor MP3/AAC of HLS kan de code in principe hetzelfde zijn, alleen de URL die in de POST-aanvraag wordt gebruikt, verandert van formaat.

Vervang hieronder het gegenereerde token door het aangegeven token:

if (!defined('API_TOKEN')) {
     define('API_TOKEN', 'AYF5lSh3c7Xy5974Fs12RTkTThujT-L9R4Xk2ZfGyP6sV7QqJ1oC3jD8nFtKzIxUeMw5oNzR6');
}
/**
 * Fonction générique pour executer des requêtes cURL
 *
 * @param string $method Méthode HTTP (GET, POST, PUT, etc...)
 * @param string $url Url de l'api a requêter
 * @param array $headers Liste des en-têtes HTTP (l'autorisation doit être passée ici avec un ['Authorization: Bearer ']
 * @param array $payload Un tableau contenant les données pour créer un token
 * @return mixed
 */

function request(string $method, string $url, array $headers = [], array $payload = []): mixed{
    // prepare options array
    $opts = [
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_URL => $url,
        CURLOPT_CUSTOMREQUEST => strtoupper($method),
    ];

    // add payload if relevant
    if ($payload && $method !== 'GET') {
        $opts[CURLOPT_POSTFIELDS] = json_encode($payload);
    }
    $ch = curl_init();
    curl_setopt_array($ch, $opts);
    $result = curl_exec($ch);
    if(curl_errno($ch)){
        throw new Exception(curl_error($ch));
    }
    $data = json_decode($result, true);
    if ($data['result'] === 'error') {
        throw new Exception($data['error']['description'] ?? 'an error occured');

    }
    return $data['data'];
}

 

Wij zullen het token genereren. De URL voor het genereren van het token is als volgt samengesteld:

  • Voor een MP3/AAC-stream
POST https://api.infomaniak.com/1/radios/acl/streams/mountpoint.mp3/token

Voorbeeld voor het beveiligen van https://newradiotest.ice.infomaniak.ch/newradiotest-128.aac: het pad wordt: https://api.infomaniak.com/1/radios/acl/streams/newradiotest-128.aac/token

  • Voor een HLS-stream
POST https://api.infomaniak.com/1/radios/acl/hls_streams/<stream>/token

Voorbeeld voor het beveiligen van https://myradiostream.radiohls.infomaniak.com/myradiostream/manifest.m3u8: het pad wordt: https://api.infomaniak.com/1/radios/acl/hls_streams/myradiostream/token

Voorbeeld in het geval van MP3/AAC, vergeet niet om aan te passen:

$token = request(
    'POST',
   'https://api.infomaniak.com/1/radios/acl/streams/newradiotest-128.aac/token',
    // en-tête d'authorization
    [
        'Authorization: Bearer ' . API_TOKEN,
        'Content-Type: application/json',
    ],
    /**
     * payload pour créer le token, vous pouvez passer les valeurs suivantes
     * window     | 300               | optionnel | durée de validité du token (default: 5 minutes)
     */

    [
        'window' => 3600, // 1h validity
    ]
);

 

Het is belangrijk om te onthouden dat, als deze code op het moment van het laden van de pagina wordt gegenereerd, de luisteraar een bepaalde tijd (in seconden) heeft om de stream af te spelen. Na het verstrijken van deze tijd verloopt het token en kan de stream niet meer worden gestart, tenzij de pagina opnieuw wordt geladen. Afhankelijk van uw behoeften en uw gebruiksscenario, zal het noodzakelijk zijn om deze tijd zo goed mogelijk aan te passen.

U moet ook de afspeel-URL van uw stream hieronder vervangen door de aangegeven URL, waarbij de parameter $token aan het einde behouden blijft. En ten slotte wordt de speler weergegeven (hier een eenvoudige HTML5-tag, maar u kunt natuurlijk elke gewenste overlay toevoegen, waarbij het token wordt doorgegeven in de parameters $_GET van de URL).

$streamUrl = "https://newradiotest.ice.infomaniak.ch/newradiotest-128.aac?$token";
echo "<audio controls=""><source src="$streamUrl"></audio>";

Link naar deze veelgestelde vragen: https://faq.infomaniak.com/2792


Is deze veelgestelde vragenlijst nuttig geweest?