View a markdown version of this page

Schritt 3: Verteilen von Token - Amazon IVS

Schritt 3: Verteilen von Token

Nachdem Sie eine Stage erstellt haben, können Sie die Tokens erstellen und verteilen, mit denen Clients ihr beitreten. Jeder Client benötigt ein Teilnehmer-Token, um einer Stage beizutreten und Videos zu senden oder zu empfangen. Anwendungen, die RealTimeConnection verwenden, benötigen ebenfalls ein Verbindungstoken.

Ein Teilnehmer-Token autorisiert eine teilnehmende Person, an einer bestimmten Stage teilzunehmen, und definiert die Veröffentlichungs- und Abonnementfunktionen dieser teilnehmenden Person. Ein Verbindungstoken autorisiert eine gemeinsam genutzte Netzwerkverbindung, die ein Client wiederverwenden kann, wenn er zwischen Stages innerhalb des gleichen AWS-Kontos und der gleichen Region wechselt. Ein Verbindungstoken ersetzt kein Teilehmer-Token. Der Client benötigt für jede Stage, der er beitritt, ein Teilnehmer-Token.

Für die Generierung von Token gibt es zwei Ansätze:

Beide Vorgehensweisen werden nachfolgend beschrieben.

Erstellen von Token mit einem Schlüsselpaar

Sie können Teilnehmer- und Verbindungstoken in Ihrer Serveranwendung erstellen, indem Sie JWTs mit einem öffentlichen/privaten ECDSA-Schlüsselpaar signieren. Importieren Sie den öffentlichen Schlüssel in IVS, damit IVS die JWT-Signatur überprüfen kann, wenn ein Client eine Verbindung herstellt.

Wichtig

Bei IVS gibt es kein Ablaufdatum für Schlüssel. Wenn Ihr privater Schlüssel gefährdet ist, müssen Sie den alten öffentlichen Schlüssel löschen.

Erstellen eines neuen Schlüsselpaares

Es gibt verschiedene Methoden, um ein Schlüsselpaar zu erstellen. Im Folgenden geben wir zwei Beispiele.

Führen Sie die folgenden Schritte aus, um in der Konsole ein neues Schlüsselpaar zu erstellen:

  1. Öffnen Sie die Amazon-IVS-Konsole. Wählen Sie die Region Ihrer Stage aus, wenn Sie sich nicht bereits darin befinden.

  2. Wählen Sie im linken Navigationsmenü Echtzeit-Streaming > Öffentliche Schlüssel aus.

  3. Wählen Sie Öffentlichen Schlüssel erstellen. Das Dialogfenster Öffentlichen Schlüssel erstellen wird angezeigt.

  4. Folgen Sie den Eingabeaufforderungen und wählen Sie Erstellen.

  5. Amazon IVS generiert ein neues Schlüsselpaar. Der öffentliche Schlüssel wird als öffentliche Schlüsselressource importiert und der private Schlüssel wird sofort zum Download zur Verfügung gestellt. Der öffentliche Schlüssel kann bei Bedarf auch später heruntergeladen werden.

    Amazon IVS generiert den Schlüssel auf der Clientseite und speichert den privaten Schlüssel nicht. Speichern Sie den Schlüssel unbedingt. Sie können ihn später nicht abrufen.

Um ein neues P384-EC-Schlüsselpaar mit OpenSSL zu erstellen, gehen Sie wie folgt vor (möglicherweise müssen Sie dazu zunächst OpenSSL installieren). Mit diesem Verfahren können Sie sowohl auf die privaten als auch auf die öffentlichen Schlüssel zugreifen. Den öffentlichen Schlüssel benötigen Sie nur, wenn Sie die Verifizierung Ihrer Token testen möchten.

openssl ecparam -name secp384r1 -genkey -noout -out priv.pem openssl ec -in priv.pem -pubout -out public.pem

Importieren Sie nun den neuen öffentlichen Schlüssel. Nutzen Sie dazu die untenstehende Anleitung.

Importieren des öffentlichen Schlüssels

Sobald Sie über ein Schlüsselpaar verfügen, können Sie den öffentlichen Schlüssel in IVS importieren. Der private Schlüssel wird von unserem System nicht benötigt; er wird von Ihnen zum Signieren von Token verwendet.

So importieren Sie einen vorhandenen öffentlichen Schlüssel mit der Konsole:

  1. Öffnen Sie die Amazon-IVS-Konsole. Wählen Sie die Region Ihrer Stage aus, wenn Sie sich nicht bereits darin befinden.

  2. Wählen Sie im linken Navigationsmenü Echtzeit-Streaming > Öffentliche Schlüssel aus.

  3. Wählen Sie Importieren aus. Das Dialogfenster Öffentlichen Schlüssel importieren wird angezeigt.

  4. Folgen Sie den Eingabeaufforderungen und wählen Sie Importieren.

  5. Amazon IVS importiert Ihren öffentlichen Schlüssel und generiert eine öffentliche Schlüsselressource.

So importieren Sie einen vorhandenen öffentlichen Schlüssel mit der CLI:

aws ivs-realtime import-public-key --public-key-material "`cat public.pem`" --region <aws-region>

Sie können --region <aws-region> auslassen, wenn sich die Region in Ihrer lokalen AWS-Konfigurationsdatei befindet.

Hier ist ein Beispiel für eine Antwort:

{ "publicKey": { "arn": "arn:aws:ivs:us-west-2:123456789012:public-key/f99cde61-c2b0-4df3-8941-ca7d38acca1a", "fingerprint": "98:0d:1a:a0:19:96:1e:ea:0a:0a:2c:9a:42:19:2b:e7", "publicKeyMaterial": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEVjYMV+P4ML6xemanCrtse/FDwsNnpYmS\nS6vRV9Wx37mjwi02hObKuCJqpj7x0lpz0bHm5v1JBvdZYAd/r2LR5aChK+/GM2Wj\nl8MG9NJIVFaw1u3bvjEjzTASSfS1BDX1\n-----END PUBLIC KEY-----\n", "tags": {} } }

API-Anforderungen

POST /ImportPublicKey HTTP/1.1 { "publicKeyMaterial": "<pem file contents>" }

Teilnehmer-Token

Ein Teilnehmer-Token autorisiert Teilnehmer, einer Stage beizutreten. Es enthält den ARN und die ID der Stage, Endpunkte, optionale Teilnehmerattribute sowie Funktionen zum Veröffentlichen und Abonnieren.

Teilnehmer-Token mit einem Schlüsselpaar erstellen

Weitere Informationen zum Arbeiten mit JWTs und den unterstützten Bibliotheken zum Signieren von Token finden Sie unter jwt.io. In der jwt.io-Oberfläche müssen Sie Ihren privaten Schlüssel eingeben, um Token zu signieren. Der öffentliche Schlüssel wird nur benötigt, wenn Sie Token verifizieren möchten.

Alle JWTs haben drei Felder: Header, Nutzlast und Signatur.

Die JSON-Schemas für den Header und die Nutzdaten des JWT werden unten beschrieben. Alternativ können Sie ein Beispiel-JSON von der IVS-Konsole kopieren. Abrufen des Headers und der Nutzdaten-JSON von der IVS-Konsole:

  1. Öffnen Sie die Amazon-IVS-Konsole. Wählen Sie die Region Ihrer Stage aus, wenn Sie sich nicht bereits darin befinden.

  2. Wählen Sie im linken Navigationsbereich Echtzeit-Streaming > Stage aus.

  3. Wählen Sie die Stage aus, die Sie verwenden möchten. Wählen Sie Details anzeigen aus.

  4. Wählen Sie im Abschnitt Teilnehmer-Token das Drop-down-Menü neben Token erstellen aus.

  5. Wählen Sie Token-Header und Nutzdaten erstellen aus.

  6. Füllen Sie das Formular aus und kopieren Sie den JWT-Header und die Nutzdaten, die unten im Popup angezeigt werden.

Token-Schema: Header

Der Header gibt Folgendes an:

  • alg ist der Signaturalgorithmus. Dies ist ES384, ein ECDSA-Signaturalgorithmus, der den SHA-384-Hash-Algorithmus verwendet.

  • typ ist der Tokentyp, JWT.

  • kid ist der ARN des öffentlichen Schlüssels, der zum Signieren des Tokens verwendet wird. Es muss derselbe ARN sein, der von der API-Anforderung GetPublicKey zurückgegeben wurde.

{ "alg": "ES384", "typ": "JWT" "kid": "arn:aws:ivs:123456789012:us-east-1:public-key/abcdefg12345" }

Token-Schema: Nutzdaten

Die Nutzdaten enthalten spezifische Daten für IVS. Alle Felder außer user_id sind Pflichtfelder.

  • RegisteredClaims in der JWT-Spezifikation sind reservierte Ansprüche, die angegeben werden müssen, damit das Stage-Token gültig ist:

    • exp (Ablaufzeit) ist ein Unix-UTC-Zeitstempel für den Zeitpunkt, an dem das Token abläuft. (Ein Unix-Zeitstempel ist ein numerischer Wert, der die Anzahl der Sekunden von 1970-01-01T00:00:00Z UTC bis zum angegebenen UTC-Datum/Uhrzeit angibt, wobei Schaltsekunden ignoriert werden.) Das Token wird validiert, wenn der Teilnehmer einer Stage beitritt. IVS stellt Token standardmäßig mit einer Gültigkeitsdauer von 12 Stunden bereit, die wir empfehlen. Diese Frist kann auf maximal 14 Tage ab dem Zeitpunkt der Ausstellung (iat) verlängert werden. Dieser Wert muss eine Ganzzahl sein.

    • iat (Ausstellungszeit) ist ein Unix-UTC-Zeitstempel für den Zeitpunkt, an dem das JWT ausgestellt wurde. (Informationen zu Unix-Zeitstempeln finden Sie in der Anmerkung für exp.) Dieser Wert muss eine Ganzzahl sein.

    • jti (JWT-ID) ist die Teilnehmer-ID, die zur Nachverfolgung verwendet wird und auf den Teilnehmer verweist, dem das Token gewährt wird. Jedes Token muss eine eindeutige Teilnehmer-ID haben. Sie muss eine Zeichenfolge sein, die Groß- und Kleinschreibung berücksichtigt, bis zu 64 Zeichen lang ist und nur alphanumerische Zeichen, Bindestrich (-) und Unterstrich (_) enthält. Andere Sonderzeichen sind nicht zulässig.

  • user_id ist ein optionaler, vom Kunden zugewiesener Name, der die Identifizierung des Tokens erleichtert. Dieser kann verwendet werden, um einen Teilnehmer mit einem Benutzer in den eigenen Systemen des Kunden zu verknüpfen. Dieser Wert muss mit dem Feld userId in der API-Anforderung CreateParticipantToken übereinstimmen. Er kann jeder UTF-8-codierte Text sein und ist eine Zeichenfolge mit bis zu 128 Zeichen. Dieses Feld ist für alle Stageteilnehmer sichtbar und darf daher nicht für personenbezogene, vertrauliche oder sensible Informationen verwendet werden.

  • resource ist der ARN der Stage; zum Beispiel arn:aws:ivs:us-east-1:123456789012:stage/oRmLNwuCeMlQ.

  • topic ist die ID der Stage, die aus dem Stage-ARN extrahiert werden kann. Wenn der Stage-ARN beispielsweise arn:aws:ivs:us-east-1:123456789012:stage/oRmLNwuCeMlQ lautet, ist die Stage-ID oRmLNwuCeMlQ.

  • events_url muss der Endpunkt für Ereignisse sein, der vom CreateStage- oder GetStage-Vorgang zurückgegeben wird. Es wird empfohlen, diesen Wert bei der Stageerstellung zwischenzuspeichern. Er kann bis zu 14 Tage lang zwischengespeichert werden. Ein Beispielwert ist wss://global.events.live-video.net.

  • whip_url muss der WHIP-Endpunkt sein, der vom CreateStage- oder GetStage-Vorgang zurückgegeben wird. Es wird empfohlen, diesen Wert bei der Stageerstellung zwischenzuspeichern. Er kann bis zu 14 Tage lang zwischengespeichert werden. Ein Beispielwert ist https://453fdfd2ad24df.global-bm.whip.live-video.net.

  • capabilities gibt die Fähigkeiten des Tokens an. Gültige Werte sind allow_publish und allow_subscribe. Für Token, die nur für Abonnements bestimmt sind, legen Sie allow_subscribe auf true fest.

  • attributes ist ein optionales Feld, in dem Sie von der Anwendung bereitgestellte Attribute angeben können, die in das Token codiert und an eine Stage angehängt werden sollen. Zuordnungsschlüssel und -werte können UTF-8-codierten Text enthalten. Die maximale Länge dieses Felds beträgt insgesamt 1 KB. Dieses Feld ist für alle Stageteilnehmer sichtbar und darf daher nicht für personenbezogene, vertrauliche oder sensible Informationen verwendet werden.

  • version muss sein 1.0.

    { "exp": 1697322063, "iat": 1697149263, "jti": "Mx6clRRHODPy", "user_id": "<optional_customer_assigned_name>", "resource": "<stage_arn>", "topic": "<stage_id>", "events_url": "wss://global.events.live-video.net", "whip_url": "https://114ddfabadaf.global-bm.whip.live-video.net", "capabilities": { "allow_publish": true, "allow_subscribe": true }, "attributes": { "optional_field_1": "abcd1234", "optional_field_2": "false" }, "version": "1.0" }

Token-Schema: Signatur

Zum Erstellen der Signatur verwenden Sie den privaten Schlüssel im Header (ES384) mit dem angegebenen Algorithmus, um den codierten Header, die codierte Nutzlast und den privaten Schlüssel zu signieren.

ECDSASHA384( base64UrlEncode(header) + "." + base64UrlEncode(payload), <private-key> )

Anleitungen

  1. Generieren Sie die Signatur des Tokens mit einem ES384-Signaturalgorithmus und einem privaten Schlüssel, der dem öffentlichen Schlüssel zugeordnet ist, der an IVS übergeben wird.

  2. Montieren des Token.

    base64UrlEncode(header) + "." + base64UrlEncode(payload) + "." + base64UrlEncode(signature)

Erstellen von Token mit der IVS-Echtzeit-Streaming-API

Teilnehmer-Token verteilen: Stage-Token-Workflow

Wie oben gezeigt, fragt eine Client-Anwendung Ihre serverseitige Anwendung nach einem Token, und die serverseitige Anwendung ruft CreateParticipantToken mithilfe eines AWS-SDK oder signierter SigV4-Anfragen auf. Da AWS-Anmeldeinformationen zum Aufrufen der API verwendet werden, sollte das Token in einer sicheren serverseitigen Anwendung generiert werden, nicht in der clientseitigen Anwendung.

Beim Erstellen eines Teilnehmer-Tokens können Sie optional Attribute und/oder Fähigkeiten angeben:

  • Sie können von der Anwendung bereitgestellte Attribute angeben, die in das Token codiert und an eine Stage angehängt werden sollen. Zuordnungsschlüssel und -werte können UTF-8-codierten Text enthalten. Die maximale Länge dieses Felds beträgt insgesamt 1 KB. Dieses Feld ist für alle Stageteilnehmer sichtbar und darf daher nicht für personenbezogene, vertrauliche oder sensible Informationen verwendet werden.

  • Sie können Fähigkeiten angeben, die durch das Token aktiviert werden. Die Standardeinstellung ist PUBLISH und SUBSCRIBE, was es dem Teilnehmer ermöglicht, Audio und Video zu senden und zu empfangen, aber Sie können Tokens mit einer Teilmenge von Funktionen ausgeben. Sie könnten zum Beispiel einen Token ausgeben, der nur die Fähigkeit SUBSCRIBE für Moderatoren enthält. In diesem Fall könnten die Moderatoren die Teilnehmer sehen, die ein Video senden, aber kein eigenes Video senden.

Einzelheiten finden Sie unter CreateParticipantToken.

Sie können Teilnehmer-Token über die Konsole oder CLI zu Test- und Entwicklungszwecken erstellen. Höchstwahrscheinlich möchten Sie sie jedoch mit dem AWS-SDK in Ihrer Produktionsumgebung erstellen.

Sie benötigen eine Möglichkeit, um Token von Ihrem Server an alle Clients zu verteilen (z. B. über eine API-Anforderung). Diese Funktionalität wird von uns nicht bereitgestellt. Für diese Anleitung können Sie die Token einfach kopieren und in den folgenden Schritten in den Client-Code einfügen.

Wichtig: Behandeln Sie Token als nicht transparent, entwickeln Sie keine Funktionen, die auf Tokeninhalten basieren. Das Format von Token könnte sich in Zukunft ändern.

Anleitung für die Konsole

  1. Navigieren Sie zu der Stage, die Sie im vorherigen Schritt erstellt haben.

  2. Wählen Sie Token erstellen aus. Das Fenster Token erstellen wird angezeigt.

  3. Geben Sie eine Benutzer-ID ein, die dem Token zugeordnet werden soll. Dies kann jeder UTF-8-kodierte Text sein.

  4. Wählen Sie Erstellen aus.

  5. Kopieren Sie das Token. Wichtig: Achten Sie darauf, das Token zu speichern. IVS speichert es nicht und Sie können es später nicht abrufen.

CLI-Anweisungen

Das Erstellen eines Tokens mit der AWS-CLI erfordert, dass Sie zuerst die CLI auf Ihrem Computer herunterladen und konfigurieren. Informationen zu den ersten Schritten finden Sie im AWS-Benutzerhandbuch für die Befehlszeilenschnittstelle. Beachten Sie, dass die Generierung von Token mit der AWS-CLI für Testzwecke gut geeignet ist. Für den produktiven Einsatz empfehlen wir jedoch, Token auf der Serverseite mit dem AWS-SDK zu generieren (siehe Anweisungen unten).

  1. Führen Sie den create-participant-token-Befehl mit dem Stage-ARN aus. Fügen Sie eine der folgenden Funktionen ein: "PUBLISH""SUBSCRIBE".

    aws ivs-realtime create-participant-token --stage-arn arn:aws:ivs:us-west-2:123456789012:stage/VSWjvX5XOkU3 --capabilities '["PUBLISH", "SUBSCRIBE"]'
  2. Dies gibt ein Teilnehmer-Token zurück:

    { "participantToken": { "capabilities": [ "PUBLISH", "SUBSCRIBE" ], "expirationTime": "2023-06-03T07:04:31+00:00", "participantId": "tU06DT5jCJeb", "token": "eyJhbGciOiJLTVMiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NjE1NDE0MjAsImp0aSI6ImpGcFdtdmVFTm9sUyIsInJlc291cmNlIjoiYXJuOmF3czppdnM6dXMtd2VzdC0yOjM3NjY2NjEyMTg1NDpzdGFnZS9NbzhPUWJ0RGpSIiwiZXZlbnRzX3VybCI6IndzczovL3VzLXdlc3QtMi5ldmVudHMubGl2ZS12aWRlby5uZXQiLCJ3aGlwX3VybCI6Imh0dHBzOi8vNjZmNzY1YWM4Mzc3Lmdsb2JhbC53aGlwLmxpdmUtdmlkZW8ubmV0IiwiY2FwYWJpbGl0aWVzIjp7ImFsbG93X3B1Ymxpc2giOnRydWUsImFsbG93X3N1YnNjcmliZSI6dHJ1ZX19.MGQCMGm9affqE3B2MAb_DSpEm0XEv25hfNNhYn5Um4U37FTpmdc3QzQKTKGF90swHqVrDgIwcHHHIDY3c9eanHyQmcKskR1hobD0Q9QK_GQETMQS54S-TaKjllW9Qac6c5xBrdAk" } }
  3. Speichern Sie dieses Token. Sie benötigen dies, um der Stage beizutreten und Videos zu senden und zu empfangen.

AWS-SDK-Anweisungen

Sie können das AWS-SDK für die Erstellung von Tokens verwenden. Im Folgenden finden Sie Anweisungen für das AWS-SDK, das JavaScript verwendet.

Wichtig: Dieser Code muss serverseitig ausgeführt und seine Ausgabe an den Client übergeben werden.

Voraussetzung: Um das folgende Codebeispiel verwenden zu können, müssen Sie das Paket aws-sdk/client-ivs-realtime installieren. Weitere Informationen dazu finden Sie unter Erste Schritte mit dem AWS-SDK für JavaScript.

import { IVSRealTimeClient, CreateParticipantTokenCommand } from "@aws-sdk/client-ivs-realtime"; const ivsRealtimeClient = new IVSRealTimeClient({ region: 'us-west-2' }); const stageArn = 'arn:aws:ivs:us-west-2:123456789012:stage/VSWjvX5XOkU3'; const createStageTokenRequest = new CreateParticipantTokenCommand({ stageArn, }); const response = await ivsRealtimeClient.send(createStageTokenRequest); console.log('token', response.participantToken.token);

Verbindungstoken

Ein Verbindungstoken ist ein selbstsigniertes JWT, das eine gemeinsam genutzte Netzwerkverbindung autorisiert. Ein Client kann diese Verbindung wiederverwenden, während er zwischen Stages innerhalb des gleichen AWS-Kontos und der gleichen Region wechselt, bis das Token abläuft.

Erstellen und signieren Sie Verbindungstoken auf Ihrem Server mit dem zuvor erstellten Schlüsselpaar. Senden Sie das Verbindungstoken an den Client, bevor dieser einen Workflow startet, der zwischen den Stages wechselt. Der Client erstellt einen RealTimeConnection und stellt ihn bei jeder Erstellung einer Stage bereit. Der Client verwendet dann das entsprechende Teilnehmer-Token für jede Stage, der er beitritt.

Token-Header

Verwenden Sie den unter Teilnehmer-Token mit einem Schlüsselpaar erstellen beschriebenen Token-Header.

Token-Nutzlast

{ "exp": 1697322063, "iat": 1697149263, "jti": "Mx6clRRHODPy", "account_id": "123456789012", "region": "us-west-2", "events_url": "wss://global.events.live-video.net", "version": "1.0" }

Die Nutzdaten enthalten spezifische Daten für IVS. Alle Felder sind Pflichtfelder:

  • RegisteredClaims in der JWT-Spezifikation sind reservierte Ansprüche, die vorhanden sein müssen, damit das Token gültig ist:

    • exp (Ablaufzeit) ist ein Unix-UTC-Zeitstempel für den Zeitpunkt, an dem das Token abläuft. Ein Token kann nach bis zu vier Wochen nach seiner Erstellung ablaufen.

    • iat (Ausstellungszeit) ist ein Unix-UTC-Zeitstempel für den Zeitpunkt, an dem das JWT ausgestellt wurde.

    • jti (JWT-ID) ist eine eindeutige Token-ID. Generieren Sie für jedes Verbindungstoken eine neue ID, bei der Groß- und Kleinschreibung beachtet wird. Die ID kann bis zu 64 alphanumerische Zeichen, Bindestriche (-) und Unterstriche (_) enthalten.

  • account_id ist die AWS-Konto-ID, der die Stages gehören.

  • region ist die Heimatregion des öffentlichen IVS-Schlüssels, der zum Signieren des Tokens verwendet wird.

  • events_url muss sein wss://global.events.live-video.net.

  • version muss sein 1.0.

Ein Verbindungstoken enthält keinen Stage-ARN, keine Stage-ID, keinen WHIP-Endpunkt, keine Teilnehmerfunktionen, keine Teilnehmerattribute und keine Benutzer-ID. Diese Werte gehören in das Teilnehmer-Token für die Stage, der der Client beitritt.

Signieren Sie das Token, wie unter Teilnehmer-Token mit einem Schlüsselpaar erstellen beschrieben, und verwenden Sie dabei den obigen Header und die Payload des Verbindungstokens.