paint-brush
Utilisation d'Amazon IVS pour créer un canal privé pour la lecture de flux en direct autoriséepar@amazonivs
544 lectures
544 lectures

Utilisation d'Amazon IVS pour créer un canal privé pour la lecture de flux en direct autorisée

Trop long; Pour lire

Amazon Interactive Video Service (Amazon IVS) prend en charge les canaux privés. Ces chaînes limiteront la lecture aux téléspectateurs qui ont obtenu un jeton signé avec une clé privée et vérifié avec une clé publique. Nous verrons comment activer l'autorisation de lecture, créer une paire de clés de lecture, générer un jeton et lire un flux privé.
featured image - Utilisation d'Amazon IVS pour créer un canal privé pour la lecture de flux en direct autorisée
Amazon Interactive Video Service (IVS)  HackerNoon profile picture
0-item

Nous avons examiné de nombreuses façons différentes de créer des expériences de diffusion en direct avec Amazon Interactive Video Service (Amazon IVS) ici sur ce blog, mais jusqu'à présent, tous ces exemples se sont concentrés sur des chaînes publiques qui peuvent être visionnées par n'importe qui sans aucune autorisation de lecture. vérifiez que le spectateur est autorisé à voir le flux en direct. De nombreuses plates-formes de contenu généré par les utilisateurs (UGC) de diffusion en direct ne nécessitent aucune autorisation pour afficher un flux, mais il existe des cas d'utilisation où nous souhaitons limiter nos spectateurs de flux à un sous-ensemble de notre public. Par exemple, nos créateurs de contenu souhaitent peut-être facturer un abonnement pour le contenu qu'ils produisent. Ou peut-être existe-t-il des limitations de licence pour le contenu du flux qui interdisent la distribution à certains groupes démographiques ou emplacements géographiques. Pour traiter les cas d'utilisation où la plateforme doit appliquer l'autorisation de lecture, Amazon IVS prend en charge les canaux privés. Ces chaînes limiteront la lecture aux téléspectateurs qui ont obtenu un jeton signé avec une clé privée et vérifié avec une clé publique. Dans cet article, nous verrons comment activer l'autorisation de lecture, créer une paire de clés de lecture, générer un jeton et lire un flux privé.

Création d'un canal privé

La première étape de ce flux de travail consiste à créer un canal privé. La création d'une chaîne privée est très similaire à la création d'une chaîne publique - la seule différence est un seul paramètre lors de la création de la chaîne pour activer l'autorisation de lecture. Nous pouvons activer l'autorisation de lecture via la console Amazon IVS , via l'AWS CLI ou via l'un des kits SDK AWS.

Commençons par voir comment créer un canal privé via la console Amazon IVS. Dans la liste des chaînes de la console, cliquez sur Créer une chaîne .

Liste des canaux Amazon IVS

Sur la page Créer une chaîne , entrez un nom de chaîne (#1), sélectionnez Configuration personnalisée (#2) et activez Activer l'exigence d'autorisation de jeton pour la lecture vidéo (#3).

Activation de l'autorisation de lecture

Si vous préférez utiliser la CLI pour créer un canal, vous pouvez ajouter l'option --authorized .

 $ aws ivs create-channel --name demo-private-channel --latency-mode LOW --type STANDARD --authorized


En réalité, vous allez probablement utiliser le kit SDK AWS pour créer les canaux de votre utilisateur. Dans ce cas, vous pouvez vous référer à la documentation du kit AWS SDK pour votre langue préférée afin de déterminer l'argument approprié à définir pour la lecture authorized . Par exemple, voici les documents pour CreateChannelCommandInput pour le kit AWS SDK pour JavaScript v3 qui indiquent que nous pouvons définir une propriété booléenne authorized lors de la création d'un canal.

Maintenant que nous avons activé l'autorisation de lecture, si nous devions diffuser sur la chaîne et essayer de visualiser la lecture en direct sans générer ni transmettre de jeton de lecture, nous recevrons une erreur de lecture. Voici un exemple de lecture à l'aide du SDK du lecteur Amazon IVS où nous avons ajouté un écouteur ERROR pour capturer les erreurs de lecture.

 const streamUrl = '[private channel Playback Url]'; const ivsPlayer = IVSPlayer.create(); ivsPlayer.attachHTMLVideoElement(document.getElementById('video-player')); ivsPlayer.load(streamUrl); ivsPlayer.play(); ivsPlayer.addEventListener(IVSPlayer.PlayerEventType.ERROR, (err) => { console.log(err); });


L'exécuter dans un navigateur lorsqu'il pointe vers un canal privé entraînera l'erreur suivante enregistrée dans la console.

 { "type": "ErrorAuthorization", "code": 7, "source": "MasterPlaylist", "message": "invalid_playback_auth_token" }


Cela confirme que notre chaîne est bien privée et nécessite qu'un token soit généré et transmis avec l' URL de lecture pour autoriser la lecture.

Création d'une clé de lecture

Avant de pouvoir générer un jeton de lecture, nous devrons créer une paire de clés privée/publique et la télécharger sur la console Amazon IVS. Cette paire de clés sera utilisée pour générer un jeton JWT signé avec la clé privée et vérifié avec la clé publique pour autoriser la lecture.

Pour gérer les clés de lecture avec la console Amazon IVS, sélectionnez Clés de lecture dans la barre latérale de navigation de gauche.

Navigation dans la console avec le lien des touches de lecture en surbrillance

Nous pouvons soit créer une clé avec la console, soit manuellement avec OpenSSL hors ligne sur notre machine locale. Pour créer une paire de clés directement dans la console. Pour cela, cliquez sur Créer une clé de lecture .

Créer un lien clé de lecture

Donnez un nom à la clé et cliquez sur Créer .

Boîte de dialogue Créer une clé de lecture

La clé publique de cette paire est enregistrée sur votre compte AWS et sera utilisée pour vérifier toutes les demandes de lecture contenant un jeton signé avec la clé privée. Lorsque vous utilisez la console Amazon IVS pour générer une paire de clés, la clé privée est immédiatement téléchargée sur votre machine et n'est pas enregistrée dans la console ni disponible pour un téléchargement ultérieur .

Création d'une paire de clés hors ligne

Si vous préférez créer votre propre paire de clés, vous pouvez le faire hors ligne, puis importer la clé publique dans la console Amazon IVS. Voici un exemple de création d'une paire de clés avec OpenSSL.

 $ openssl ecparam -name secp384r1 -genkey -noout -out demo-private-channel-private-key-1.pem $ openssl ec -in demo-private-channel-private-key-1.pem -pubout -out demo-private-channel-public-key-1.pem


Pour importer la clé publique, cliquez sur Importer sur la page Liste des clés de lecture .

Bouton d'importation de clé

Donnez un nom à la clé importée et recherchez le fichier de clé publique (ou collez le contenu du fichier de clé publique ).

Boîte de dialogue d'importation de clé

Cela peut également être fait via l'AWS CLI :

 $ aws ivs \ import-playback-key-pair \ --name demo-private-channel-playback-key-1 \ --public-key-material "`cat /path/to/your/public-key.pem`"


Ou via le SDK AWS ( docs pour l'exemple JavaScript).

Lecture de canal privé

Maintenant que nous avons créé un canal privé et une paire de clés de lecture, nous sommes prêts à générer des jetons d'autorisation de lecture signés. Dans votre application, votre logique métier dictera quels utilisateurs doivent recevoir un jeton d'autorisation. Comme mentionné ci-dessus, votre logique d'application vérifiera peut-être d'abord que l'utilisateur est un abonné valide au canal en interrogeant une base de données. Ou, dans le cas de restrictions géographiques, vous devrez peut-être rechercher l'adresse IP du spectateur pour vous assurer qu'il est associé à une région capable de visualiser le flux. L'implémentation exacte variera, mais une fois que vous avez déterminé si le spectateur est effectivement autorisé à voir le flux, vous pouvez continuer avec la méthode de génération de jeton décrite ci-dessous.

Attention : la génération de jetons diffère en fonction de la langue que vous utilisez sur le backend. Reportez-vous au guide de l'utilisateur pour plus de détails sur les exigences.

Pour générer un jeton avec Node.js, nous pouvons utiliser la bibliothèque jsonwebtoken ( docs ). Cette bibliothèque simplifiera le processus et nous permettra de signer notre charge utile avec l'algorithme de signature SHA-384 comme requis par Amazon IVS. Notre charge utile doit contenir l' ARN du canal , une access-control-origin pour limiter la lecture à un domaine spécifique (ou * pour tous les domaines) et un horodatage d'expiration du jeton. Pour signer la charge utile, nous allons la formater comme ci-dessous et utiliser la clé privée que nous avons créée et importée ci-dessus.

Remarque : le jeton est utilisé pour démarrer la lecture sur un canal privé, de sorte que la période d'expiration ne s'applique qu'au temps entre la génération du jeton et le début de la lecture. Cela ne concerne pas la durée pendant laquelle l'utilisateur peut lire un flux donné. Une fois la lecture autorisée, elle peut continuer jusqu'à ce que l'utilisateur se déconnecte ou recharge la page Web.

Voici une façon de générer un jeton sur le backend (via un microservice ou une application sans serveur) à l'aide de Node.js.

 import jwt from "jsonwebtoken"; const getToken = () => { const privateChannelArn = process.env.DEMO_PRIVATE_CHANNEL_ARN; // private channel ARN const privateChannelPrivateKey = process.env.DEMO_PRIVATE_CHANNEL_PRIVATE_KEY; // playback private key const payload = { "aws:channel-arn": privateChannelArn, "aws:access-control-allow-origin": "*", "exp": Date.now() + (60 * 1000), // expires in 1 minute }; const token = jwt.sign(payload, privateChannelPrivateKey, { algorithm: 'ES384' }); return token; }


Dans notre interface, nous pouvons récupérer le jeton du backend et l'ajouter à l' URL de lecture du canal privé. Dans l'exemple ci-dessous, j'ai tronqué l'URL de lecture ( streamUrl ) pour plus de concision.

 const streamUrl = `https://[truncated].m3u8?token=${token}` const ivsPlayer = IVSPlayer.create(); ivsPlayer.attachHTMLVideoElement(document.getElementById('video-player')); ivsPlayer.load(streamUrl); ivsPlayer.play();


Résumé

Dans cet article, nous avons appris à créer des canaux privés, à créer et à importer des paires de clés de lecture et à générer un jeton JWT pour l'autorisation de lecture. Pour en savoir plus sur les chaînes privées, reportez-vous au guide de l'utilisateur .