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:
-
Öffnen Sie die Amazon-IVS-Konsole.
Wählen Sie die Region Ihrer Stage aus, wenn Sie sich nicht bereits darin befinden. -
Wählen Sie im linken Navigationsmenü Echtzeit-Streaming > Öffentliche Schlüssel aus.
-
Wählen Sie Öffentlichen Schlüssel erstellen. Das Dialogfenster Öffentlichen Schlüssel erstellen wird angezeigt.
-
Folgen Sie den Eingabeaufforderungen und wählen Sie Erstellen.
-
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
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:
-
Öffnen Sie die Amazon-IVS-Konsole.
Wählen Sie die Region Ihrer Stage aus, wenn Sie sich nicht bereits darin befinden. -
Wählen Sie im linken Navigationsmenü Echtzeit-Streaming > Öffentliche Schlüssel aus.
-
Wählen Sie Importieren aus. Das Dialogfenster Öffentlichen Schlüssel importieren wird angezeigt.
-
Folgen Sie den Eingabeaufforderungen und wählen Sie Importieren.
-
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
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:
-
Öffnen Sie die Amazon-IVS-Konsole.
Wählen Sie die Region Ihrer Stage aus, wenn Sie sich nicht bereits darin befinden. -
Wählen Sie im linken Navigationsbereich Echtzeit-Streaming > Stage aus.
-
Wählen Sie die Stage aus, die Sie verwenden möchten. Wählen Sie Details anzeigen aus.
-
Wählen Sie im Abschnitt Teilnehmer-Token das Drop-down-Menü neben Token erstellen aus.
-
Wählen Sie Token-Header und Nutzdaten erstellen aus.
-
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:
-
algist der Signaturalgorithmus. Dies ist ES384, ein ECDSA-Signaturalgorithmus, der den SHA-384-Hash-Algorithmus verwendet. -
typist der Tokentyp, JWT. -
kidist 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.
-
RegisteredClaimsin 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ürexp.) 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_idist 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 FelduserIdin 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. -
resourceist der ARN der Stage; zum Beispielarn:aws:ivs:us-east-1:123456789012:stage/oRmLNwuCeMlQ. -
topicist die ID der Stage, die aus dem Stage-ARN extrahiert werden kann. Wenn der Stage-ARN beispielsweisearn:aws:ivs:us-east-1:123456789012:stage/oRmLNwuCeMlQlautet, ist die Stage-IDoRmLNwuCeMlQ. -
events_urlmuss 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 istwss://global.events.live-video.net. -
whip_urlmuss 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 isthttps://453fdfd2ad24df.global-bm.whip.live-video.net. -
capabilitiesgibt die Fähigkeiten des Tokens an. Gültige Werte sindallow_publishundallow_subscribe. Für Token, die nur für Abonnements bestimmt sind, legen Sieallow_subscribeauftruefest. -
attributesist 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. -
versionmuss sein1.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
-
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.
-
Montieren des Token.
base64UrlEncode(header) + "." + base64UrlEncode(payload) + "." + base64UrlEncode(signature)
Erstellen von Token mit der IVS-Echtzeit-Streaming-API
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
PUBLISHundSUBSCRIBE, 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ähigkeitSUBSCRIBEfü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
-
Navigieren Sie zu der Stage, die Sie im vorherigen Schritt erstellt haben.
-
Wählen Sie Token erstellen aus. Das Fenster Token erstellen wird angezeigt.
-
Geben Sie eine Benutzer-ID ein, die dem Token zugeordnet werden soll. Dies kann jeder UTF-8-kodierte Text sein.
-
Wählen Sie Erstellen aus.
-
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).
-
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"]' -
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" } } -
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:
-
RegisteredClaimsin 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_idist die AWS-Konto-ID, der die Stages gehören. -
regionist die Heimatregion des öffentlichen IVS-Schlüssels, der zum Signieren des Tokens verwendet wird. -
events_urlmuss seinwss://global.events.live-video.net. -
versionmuss sein1.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.