View a markdown version of this page

Etapa 3: Distribuir tokens - Amazon IVS

Etapa 3: Distribuir tokens

Agora que você tem um estágio, crie e distribua tokens que os clientes usam para participar dele. Cada cliente precisa de um token de participante para entrar em um estágio e enviar ou receber vídeos. Os aplicativos que usam RealTimeConnection também precisam de um token de conexão.

Um token de participante autoriza um participante a participar de um estágio específico e define os recursos de publicação e assinatura dele. Um token de conexão autoriza uma conexão de rede compartilhada que um cliente pode reutilizar enquanto se move entre os estágios na mesma conta e região da AWS. Um token de conexão não substitui um token de participante. O cliente precisa de um token de participante para cada estágio em que entra.

Existem duas abordagens para gerar tokens:

Ambas as abordagens são descritas a seguir.

Criar tokens com um par de chaves

Você pode criar tokens de participantes e tokens de conexão no aplicativo de servidor assinando JWTs com um par de chaves pública/privada ECDSA. Importe a chave pública para o IVS para que ele possa verificar a assinatura do JWT quando um cliente se conectar.

Importante

O IVS não oferece expiração de chave. Se a chave privada estiver comprometida, você deverá excluir a chave pública antiga.

Criar um novo par de chaves

Existem vários métodos para criar um par de chaves. Abaixo, damos dois exemplos.

Para criar um par de chaves no console, siga estas etapas:

  1. Abra o console do Amazon IVS. Escolha a região do estágio se não estiver nela.

  2. No menu de navegação à esquerda, escolha Streaming em tempo real > Chaves públicas.

  3. Selecione Create public key (Criar chave pública). A caixa de diálogo Criar chave pública é exibida.

  4. Escolha Create (Criar) e siga as solicitações.

  5. O Amazon IVS gera um novo par de chaves. A chave pública é importada como um recurso de chave pública, e a chave privada é imediatamente disponibilizada para download. A chave pública também pode ser baixada posteriormente, se necessário.

    O Amazon IVS gera a chave no lado do cliente e não armazena a chave privada. Certifique-se de salvar a chave, pois você não poderá recuperá-la mais tarde.

Para criar um novo par de chaves EC P384 com o OpenSSL (talvez seja necessário instalar o OpenSSL primeiro), siga estas etapas. Este processo permite acessar as chaves privadas e públicas. Você precisará da chave pública somente se quiser testar a verificação de seus tokens.

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

Agora importe sua nova chave pública usando as instruções abaixo.

Importar a chave pública

Caso já tenha um par de chaves, você poderá importar a chave pública para o IVS. A chave privada não é necessária para nosso sistema, mas é usada por você para assinar tokens.

Para importar uma chave pública existente com o console:

  1. Abra o console do Amazon IVS. Escolha a região do estágio se não estiver nela.

  2. No menu de navegação à esquerda, escolha Streaming em tempo real > Chaves públicas.

  3. Escolha Importar. Uma caixa de diálogo Importar chave pública é exibida.

  4. Selecione Import (Importar) e siga as solicitações.

  5. O Amazon IVS importa a chave pública e gera um recurso de chave pública.

Para importar uma chave pública existente com a CLI:

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

É possível omitir --region <aws-region> se a região estiver no seu arquivo de configuração local da AWS.

Este é um exemplo de resposta:

{ "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": {} } }

Solicitações de API

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

Tokens de participante

Um token de participante autoriza um participante a fazer parte de um estágio. Ele contém o ARN e o ID do estágio, os endpoints, os atributos opcionais do participante e os recursos de publicação e assinatura.

Crie tokens de participantes com um par de chaves

Para obter detalhes sobre como trabalhar com JWTs e as bibliotecas suportadas para assinar tokens, visite jwt.io. Na interface do jwt.io, é necessário inserir sua chave privada para assinar os tokens. A chave pública será necessária somente se você quiser verificar os tokens.

Todos os JWTs têm três campos: cabeçalho, carga útil e assinatura.

Os esquemas JSON para o cabeçalho e a carga útil do JWT são descritos abaixo. Como alternativa, você pode copiar um exemplo de JSON do console do IVS. Para obter a carga útil e o cabeçalho JSON do console do IVS:

  1. Abra o console do Amazon IVS. Escolha a região do estágio se não estiver nela.

  2. No painel de navegação à esquerda, escolha Streaming em tempo real > Palcos.

  3. Selecione o palco que você deseja usar. Selecione Exibir detalhes.

  4. Na seção Tokens de participantes, selecione o menu suspenso ao lado de Criar token.

  5. Selecione Criar cabeçalho e carga útil de token.

  6. Preencha o formulário e copie a carga útil e o cabeçalho JWT mostrados na parte inferior do pop-up.

Esquema de token: cabeçalho

O cabeçalho especifica:

  • alg é o algoritmo de assinatura. Este é o ES384, um algoritmo de assinatura ECDSA que usa o algoritmo de hash SHA-384.

  • typ é o tipo de token, JWT.

  • kid é o ARN da chave pública usada para assinar o token. Ele deve ser o mesmo ARN retornado da solicitação da API GetPublicKey.

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

Esquema de token: carga útil

A carga útil contém dados específicos do IVS. Todos os campos, exceto user_id, são obrigatórios.

  • RegisteredClaims na especificação de JWT são declarações reservadas que precisam ser fornecidas para que o token do palco seja válido:

    • exp (tempo de expiração) é um carimbo de data e hora UTC do Unix para quando o token expirar. (Observe que um carimbo de data e hora do Unix é um valor numérico que representa o número de segundos de 1970-01-01T00:00:00Z UTC até a data e hora UTC especificada, ignorando os segundos de salto.) O token é validado quando o participante entra em um palco. O IVS fornece tokens com um TTL padrão de 12 horas, o que recomendamos. Isso pode ser estendido até um máximo de 14 dias a partir do momento da emissão (iat). Esse valor deve ser um número inteiro.

    • iat (emitido no momento) é um carimbo de data e hora UTC do Unix para quando o JWT foi emitido. (Veja a observação de exp sobre carimbos de data e hora do Unix.) Esse valor deve ser um número inteiro.

    • jti (ID do JWT) é o ID do participante usado para rastrear e fazer referência ao participante a quem o token foi concedido. Cada token deve ter um ID de participante exclusivo. Deve ser uma string com distinção de maiúsculas e minúsculas, com até 64 caracteres, contendo somente caracteres alfanuméricos, hífen (-) e sublinhado (_). Nenhum outro caractere especial é permitido.

  • user_id é um nome opcional atribuído pelo cliente para ajudar a identificar o token. Pode ser usado para vincular um participante a um usuário nos sistemas do próprio cliente. Isso deve corresponder ao campo userId na solicitação da API CreateParticipantToken. Ele pode ser qualquer texto codificado em UTF-8 e é uma string de até 128 caracteres. Este campo fica exposto para todos os participantes do palco e não deve ser usado ​​para identificação pessoal, informações confidenciais ou sigilosas.

  • resource é o ARN do estágio, como, por exemplo, arn:aws:ivs:us-east-1:123456789012:stage/oRmLNwuCeMlQ.

  • topic é o ID do palco, que pode ser extraído do ARN do palco. Por exemplo, se o ARN do palco for arn:aws:ivs:us-east-1:123456789012:stage/oRmLNwuCeMlQ, o ID do palco será oRmLNwuCeMlQ.

  • events_url deve ser o endpoint de eventos retornado da operação CreateStage ou GetStage. Recomendamos que você armazene esse valor em cache no momento da criação do palco. O valor pode ser armazenado em cache por até 14 dias. Um exemplo de valor é wss://global.events.live-video.net.

  • whip_url deve ser o endpoint do WHIP retornado da operação CreateStage ou GetStage. Recomendamos que você armazene esse valor em cache no momento da criação do palco. O valor pode ser armazenado em cache por até 14 dias. Um exemplo de valor é https://453fdfd2ad24df.global-bm.whip.live-video.net.

  • capabilities especifica os recursos do token. Os valores válidos são allow_publish e allow_subscribe. Para tokens somente para assinantes, defina somente allow_subscribe como true.

  • attributes é um campo opcional em que você pode especificar atributos fornecidos pela aplicação para codificar no token e anexar a um palco. Chaves e valores de mapa podem conter texto codificado em UTF-8. Este campo não pode ultrapassar o total de 1 KB. Este campo fica exposto para todos os participantes do palco e não deve ser usado ​​para identificação pessoal, informações confidenciais ou sigilosas.

  • version deve ser 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" }

Esquema de token: assinatura

Para criar a assinatura, use a chave privada com o algoritmo especificado no cabeçalho (ES384) para assinar o cabeçalho codificado e a carga útil codificada.

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

Instruções

  1. Gere a assinatura do token com um algoritmo de assinatura ES384 e uma chave privada associada à chave pública fornecida para o IVS.

  2. Monte o token.

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

Criar tokens com a API de streaming em tempo real do IVS

Distribuir tokens de participantes: fluxo de trabalho de token do palco

Conforme mostrado acima, um aplicativo do cliente solicita um token ao seu aplicativo de servidor, e o aplicativo de servidor chama CreateParticipantToken usando um SDK ou uma solicitação assinada SigV4 da AWS. Como as credenciais da AWS são usadas para chamar a API, o token deve ser gerado em uma aplicação segura do lado do servidor, não na aplicação do lado do cliente.

Ao criar um token de participante, você pode opcionalmente especificar atributos e recursos:

  • Você pode especificar atributos fornecidos pela aplicação para codificar no token e anexar a um palco. Chaves e valores de mapa podem conter texto codificado em UTF-8. Este campo não pode ultrapassar o total de 1 KB. Este campo fica exposto para todos os participantes do palco e não deve ser usado ​​para identificação pessoal, informações confidenciais ou sigilosas.

  • Você pode especificar os recursos habilitados pelo token. O padrão é PUBLISH e SUBSCRIBE, que permite ao participante enviar e receber áudio e vídeo, mas você pode emitir tokens com um subconjunto de funcionalidades. Por exemplo, é possível emitir um token somente com a funcionalidade SUBSCRIBE para moderadores. Nesse caso, os moderadores podem visualizar os participantes que estão enviando vídeos, mas não podem enviar seus próprios vídeos.

Para obter detalhes, consulte CreateParticipantToken.

É possível criar tokens de participantes usando o console ou a CLI para teste e desenvolvimento, mas é mais provável que você queira criá-los com o SDK da AWS em seu ambiente de produção.

Você precisará de uma forma de distribuir os tokens do seu servidor para cada cliente (por exemplo, por meio de uma solicitação de API). Não fornecemos essa funcionalidade. Para este guia, você pode simplesmente copiar e colar os tokens no código do cliente nas etapas a seguir.

Importante: trate os tokens como opacos; ou seja, não desenvolva funcionalidades baseadas no conteúdo do token. O formato dos tokens poderá mudar no futuro.

Instruções do console

  1. Navegue até o palco criado na etapa anterior.

  2. Selecione Criar token. A janela Criar token é exibida.

  3. Insira um ID de usuário a ser associado ao token. Isso pode ser qualquer texto codificado em UTF-8.

  4. Escolha Criar.

  5. Copie o token. Importante: certifique-se de salvar o token. O IVS não o armazena, e você não poderá recuperá-lo posteriormente.

Instruções da CLI

A criação de um token com a CLI da AWS exige que você faça o download e configure a CLI em sua máquina primeiro. Para obter mais detalhes, consulte o Guia do usuário da AWS Command Line Interface. Observe que gerar tokens com a CLI da AWS é bom para fins de teste, mas para uso em produção, recomendamos que você gere tokens do lado do servidor com o SDK da AWS (consulte as instruções abaixo).

  1. Execute o comando create-participant-token com o ARN do palco. Inclua qualquer uma ou todas as seguintes funcionalidades: "PUBLISH" e "SUBSCRIBE".

    aws ivs-realtime create-participant-token --stage-arn arn:aws:ivs:us-west-2:123456789012:stage/VSWjvX5XOkU3 --capabilities '["PUBLISH", "SUBSCRIBE"]'
  2. Isso retorna um token de participante:

    { "participantToken": { "capabilities": [ "PUBLISH", "SUBSCRIBE" ], "expirationTime": "2023-06-03T07:04:31+00:00", "participantId": "tU06DT5jCJeb", "token": "eyJhbGciOiJLTVMiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NjE1NDE0MjAsImp0aSI6ImpGcFdtdmVFTm9sUyIsInJlc291cmNlIjoiYXJuOmF3czppdnM6dXMtd2VzdC0yOjM3NjY2NjEyMTg1NDpzdGFnZS9NbzhPUWJ0RGpSIiwiZXZlbnRzX3VybCI6IndzczovL3VzLXdlc3QtMi5ldmVudHMubGl2ZS12aWRlby5uZXQiLCJ3aGlwX3VybCI6Imh0dHBzOi8vNjZmNzY1YWM4Mzc3Lmdsb2JhbC53aGlwLmxpdmUtdmlkZW8ubmV0IiwiY2FwYWJpbGl0aWVzIjp7ImFsbG93X3B1Ymxpc2giOnRydWUsImFsbG93X3N1YnNjcmliZSI6dHJ1ZX19.MGQCMGm9affqE3B2MAb_DSpEm0XEv25hfNNhYn5Um4U37FTpmdc3QzQKTKGF90swHqVrDgIwcHHHIDY3c9eanHyQmcKskR1hobD0Q9QK_GQETMQS54S-TaKjllW9Qac6c5xBrdAk" } }
  3. Salve esse token. Você precisará dele para ingressar no estágio e enviar e receber vídeos.

AWSInstruções do SDK

É possível usar o AWS SDK para criar tokens. Abaixo estão as instruções para o AWS SDK usando JavaScript.

Importante: esse código deve ser executado no lado do servidor e sua saída transferida para o cliente.

Pré-requisito: para usar o exemplo de código abaixo, é necessário instalar o pacote aws-sdk/client-ivs-realtime. Para obter mais detalhes, consulte Conceitos básicos do AWS SDK para 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);

Tokens de conexão

O token de conexão é um JWT autoassinado que autoriza uma conexão de rede compartilhada. Um cliente pode reutilizar essa conexão ao se mover entre os estágios na mesma conta e região da AWS, até que o token expire.

Crie e assine tokens de conexão no seu servidor com o par de chaves criado anteriormente. Envie o token de conexão ao cliente antes que ele comece um fluxo de trabalho que se move entre os estágios. O cliente cria um RealTimeConnection e o apresenta sempre que cria um estágio. Então, o cliente usa o token de participante apropriado para cada estágio em que ingressa.

Cabeçalho do token

Use o cabeçalho do token descrito em Como criar tokens de participantes com um par de chaves.

Carga útil do token

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

A carga útil contém dados específicos do IVS. Todos os campos são obrigatórios:

  • RegisteredClaims na especificação de JWT são declarações reservadas que precisam ser apresentadas para que o token seja válido:

    • exp (tempo de expiração) é um carimbo de data e hora UTC do Unix para quando o token expirar. Um token pode expirar até quatro semanas após o horário da criação dele.

    • iat (emitido na hora) é um carimbo de data e hora UTC do Unix para quando o JWT foi emitido.

    • jti (ID do JWT) é um ID de token exclusivo. Crie um novo ID com distinção entre maiúsculas e minúsculas para cada token de conexão. O ID pode ter até 64 caracteres alfanuméricos, hífens (-) e sublinhados (_).

  • account_id é o ID da conta da AWS que detém os estágios.

  • region é a região inicial da chave pública do IVS que foi usada para assinar o token.

  • events_url deve ser wss://global.events.live-video.net.

  • version deve ser 1.0.

Um token de conexão não contém ARN de estágio, ID de estágio, endpoint WHIP, recursos do participante, atributos do participante ou ID do usuário. Esses valores pertencem ao token de participante do estágio em que o cliente ingressa.

Assine o token conforme descrito em Como criar tokens de participante com um par de chaves, usando o cabeçalho do token de conexão e a carga útil acima.