Autenticação

As APIs da Vonage oferecem suporte a diferentes métodos de autenticação, dependendo do produto que você estiver utilizando:

1 O Messages oferece suporte tanto à autenticação JWT quanto à autenticação básica; no entanto, a autenticação básica não oferece suporte a webhooks nem a recursos avançados, como ACLs. Para a maioria dos casos de uso, recomendamos a autenticação JWT. Consulte Autenticação na Messages API

2 Verify oferece suporte tanto à autenticação JWT quanto à autenticação básica; no entanto, a autenticação básica não oferece suporte a webhooks nem a recursos avançados, como ACLs.

3 Usos do SIP Trunking Autenticação por hash método, utilizando a chave da API como nome de usuário e o segredo da API como senha.

Índice

Neste documento, você poderá conhecer os seguintes métodos de autenticação:

Chave e segredo da API

Ao criar um account na Vonage, uma chave e um segredo de API serão gerados para você. Eles estão localizados em sua configurações da conta no Painel da Vonage. Você deve sempre mantê-las em segurança e Nunca compartilhe esses detalhes: tenha cuidado ao adicioná-lo ao seu código-fonte para garantir que ele não seja compartilhado com ninguém que possa usá-lo de forma maliciosa. Se você usar assinaturas de mensagens, estes são gerados usando o SIGNATURE_SECRET em vez do API_SECRET; ambos os valores podem ser encontrados no seu configurações da conta.

Observação: O segredo deve ser sempre mantido em segurança e nunca compartilhado. Tenha cuidado ao adicioná-lo ao seu código-fonte para garantir que ele não seja compartilhado com ninguém que possa usá-lo de forma maliciosa. Saiba mais sobre o Melhores práticas de segurança para sua conta da Vonage.

As APIs da Vonage podem solicitar sua chave de API e seu segredo de várias maneiras diferentes.

Autenticação básica

Várias APIs mais recentes da Vonage exigem que a autenticação seja feita por meio de uma chave de API e um segredo enviados codificados em Base64 no Authorization cabeçalho.

Para essas APIs, você envia sua chave e seu segredo da API da seguinte maneira:

Authorization: Basic base64(API_KEY:API_SECRET)

Se a sua chave de API fosse aaa012 e seu segredo da API era abc123456789, você concatenaria a chave e o segredo com um : o símbolo (dois pontos) e, em seguida, codificá-los usando a codificação Base64 para gerar um valor como este:

Authorization: Basic YWFhMDEyOmFiYzEyMzQ1Njc4OQ==

Um site para gerar sequências codificadas em Base64 pode ser encontrado aqui:

Detalhes sobre como codificar strings em Base64 em diversas linguagens de programação podem ser encontrados nos seguintes sites:

Rotação Secreta

É possível ter dois segredos de API associados a uma mesma chave de API ao mesmo tempo. Dessa forma, você pode criar um segundo segredo de API e testá-lo antes de revogar o segredo de API existente em sua rede de produção. O procedimento de rotação de segredos de API consiste nas seguintes etapas:

  1. Crie um segundo segredo de API no seu configurações da conta ou usando o API de rotação secreta.
  2. Atualize um ou mais dos seus servidores para que utilizem o segredo da API recém-criado ao fazer chamadas às APIs da Vonage
  3. Verifique se não há problemas de conectividade e implemente a atualização do segredo da API nos servidores restantes
  4. Exclua o segredo da API substituído

Tokens JSON da Web

Tokens JSON da Web (JWTs) são um meio compacto e seguro para URLs de representar reivindicações a serem transferidas entre duas partes. Para obter uma lista completa das APIs que utilizam JWTs, consulte a tabela acima.

Cabeçalho e carga útil

Os JWTs são compostos por um cabeçalho e uma carga útil. Os valores do cabeçalho são:

Nome Descrição Obrigatório
alg O algoritmo de criptografia utilizado para gerar o JWT. RS256 é compatível.
typ A estrutura do token. Definida como JWT.

Os valores para a declaração de carga útil são:

Nome Descrição Obrigatório
application_id O ID exclusivo atribuído ao seu aplicativo pela Vonage.
iat O timestamp UNIX em UTC + 0 que indica o momento em que o JWT foi solicitado.
jti Um identificador exclusivo do JWT, na forma de uma sequência de caracteres.
nbf O timestamp UNIX em UTC + 0 que indica o momento em que o JWT passou a ser válido.
exp O timestamp UNIX em UTC + 0 que indica o momento em que o JWT deixa de ser válido. Um valor mínimo de 30 segundos a partir do momento em que o JWT é gerado. Um valor máximo de 24 horas a partir do momento em que o JWT é gerado. Um valor padrão de 15 minutos a partir do momento em que o JWT é gerado.

Geração de JWTs

Usando a CLI da Vonage para gerar JWTs

O CLI da Vonage fornece um comando para gerar um JWT.

Um exemplo de geração de um JWT para um aplicativo é o seguinte:

# A command with parameters
vonage jwt create `
--app-id='00000000-0000-0000-0000-000000000000' `
--private-key=./private.key

# Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ
REM A command with parameters
vonage jwt create ^
--app-id='00000000-0000-0000-0000-000000000000' ^
--private-key=./private.key

REM Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ
# A command with parameters vonage jwt create \ --app-id='00000000-0000-0000-0000-000000000000' \ --private-key=./private.key # Will produce a token eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ

A chave privada em questão é gerada a partir do painel de controle do aplicativo ou a partir de vonage apps create. Você pode salvar essas informações para a CLI executando vonage auth set. O conteúdo da chave privada será então salvo em o .vonagerc arquivo ou $HOME/.vonage/config.json.

Mais informações sobre o CLI da Vonage podem ser encontradas em seu repositório no GitHub.

É possível encontrar exemplos de uso das bibliotecas da Vonage para gerar JWTs abaixo. Caso você não esteja utilizando uma biblioteca da Vonage, consulte RFC 7519 para implementar JWTs.

SDKs do cliente da Vonage

A Vonage Cliente e Vídeo Os SDKs utilizam JWTs para autenticação quando um cliente se conecta à Vonage. Esses JWTs são gerados a partir do ID do aplicativo e da chave privada fornecidos quando um novo aplicativo é criado.

Reclamações

Usando isso private.key e o ID do aplicativo, você pode gerar um novo JWT. Para fazer o login de um usuário em um cliente da Vonage, o JWT precisará das seguintes reivindicações:

Vonage Client SDK
Reivindicação Descrição
sub O “assunto”. O assunto, neste caso, será o nome do usuário criado e associado ao seu aplicativo da Vonage.
acl Lista de controle de acesso. O Client SDK utiliza isso como um sistema de permissões para os usuários. Saiba mais sobre o assunto na Visão geral do ACL.
application_id Este é o ID da Application da Vonage que você criou.
iat "Hora de emissão" Esta é a hora em que o JWT foi emitido, expressa em tempo da época Unix.
jti "JWT ID". Trata-se de um identificador único, na forma de string, para este JWT.
exp "Tempo de validade" É o momento no futuro em que o JWT expirará, expresso em tempo da época Unix.

O exp A solicitação é opcional. Se a reivindicação não for fornecida, o JWT expirará, por padrão, em 15 minutos. O tempo máximo de validade de um JWT é de 24 horas. Normalmente, os JWTs devem ter validade curta, pois é muito fácil criar um novo JWT e alguns deles podem ter várias permissões de longo alcance.

Exemplo de carga útil JWT do Client SDK

Depois que todas as reivindicações tiverem sido fornecidas, as reivindicações resultantes deverão ficar assim:

{
  "iat": 1532093588,
  "jti": "705b6f50-8c21-11e8-9bcb-595326422d60",
  "sub": "alice",
  "exp": "1532179987",
  "acl": {
    "paths": {
      ...
    }
  },
  "application_id": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab"
}

( ... (o trecho foi truncado)

Vonage Client SDK do Cliente de Vídeo
Reivindicação Descrição
sub O “assunto”. O assunto, neste caso, deve ser a sequência de caracteres video.
acl Lista de controle de acesso. O Client SDK utiliza isso como um sistema de permissões para os usuários. Saiba mais sobre o assunto na Visão geral do ACL.
application_id Este é o ID da Application da Vonage que você criou.
session_id Este é o ID do Sessão que você criou.
scope Este é o escopo do token. Deve ser a sequência de caracteres session.connect.
role Essa é a função do token. Ele pode ser uma sequência de caracteres valores dependendo das permissões que você deseja conceder a esse token.
data Esses metadados personalizados podem ser adicionados opcionalmente para descrever o token. Trata-se de uma sequência de caracteres limitada a 1.000 caracteres.
initial_layout_class_list Isso permite que você, opcionalmente, ao transmitir, especifique o valor inicial lista de classes de layout para transmissões publicadas pelo cliente.
iat "Hora de emissão" Esta é a hora em que o JWT foi emitido, expressa em tempo da época Unix.
jti "JWT ID". Trata-se de um identificador único, na forma de string, para este JWT.
exp "Tempo de validade" É o momento no futuro em que o JWT expirará, expresso em tempo da época Unix.

O exp A solicitação é opcional. Se a reivindicação não for fornecida, o JWT expirará, por padrão, em 24 horas. O prazo máximo de validade de um JWT do Video SDK é de 30 dias. Normalmente, os JWTs devem ter validade curta, pois é muito fácil criar um novo JWT e alguns deles podem ter várias permissões de longo alcance. Certifique-se sempre de tentar definir um exp tempo até o menor tempo possível para a sua aplicação.

Exemplo de carga útil JWT do Client SDK do vídeo
{
  "scope": "session.connect",
  "session_id": "1_MX44YjY4NTFmZS01NjdjLTRlODYtYWRmOC0zYmVhODM2MzNjNjB-fjE3NDIzMDY0ODY0NjZ-WS9FOHhybUdHV0JtTGZYTEV2aVlwV1N4fn5-",
  "role": "moderator",
  "initial_layout_class_list": "",
  "sub": "video",
  "acl": {
    "paths": {
      "/session/**": {}
    }
  },
  "jti": "c04c96ba-3229-4fd4-9f55-406b6a6eb485",
  "iat": 1742306486,
  "exp": 1742307386,
  "application_id": "8b6851fe-567c-4e86-adf8-3bea83633c60"
}

Lista de Controle de Acesso (ACL)

No exemplo de carga útil de solicitação JWT acima, observe como o acl a alegação tem um paths objeto. O objeto path contém uma lista de pontos finais que correspondem a determinadas permissões que um usuário possui ao utilizar o Client SDK.

A seguir, está a lista de endpoints aos quais você pode conceder acesso a um usuário:

Ponto final Descrição Obrigatório para
/*/rtc/** Criar uma sessão de sinalização para receber eventos e enviar métricas Chamadas/mensagens no aplicativo
/*/sessions/** Faça login como usuário de In-App Voice ou chat no aplicativo Chamadas/mensagens no aplicativo
/*/users/** Obtendo conversas de usuários, sessões de usuários e objetos de usuário Chamadas/mensagens no aplicativo
/*/conversations/** Criar e gerenciar conversas e enviar/receber mensagens Chamadas/mensagens no aplicativo
/*/knocking/** Iniciar chamadas telefônicas Chamadas no aplicativo
/*/devices/** Registrar o dispositivo para receber notificações push Chamadas/mensagens no aplicativo
/*/legs/** Criar e gerenciar etapas em uma conversa Chamadas no aplicativo
/*/session/** Conectar-se a uma sessão de vídeo Vídeo

Você deve conceder ao usuário que está criando permissões para acessar apenas os caminhos relevantes. Por exemplo, se o usuário do Client SDK não precisar obter informações sobre seu próprio objeto User ou sobre outros usuários, você deve omitir o users caminho. Para ilustrar melhor, se você adicionar o /*/conversations/** caminho para a ACL de um JWT, o usuário poderá criar e gerenciar conversas. Além disso, se este for o apenas Com o conjunto de ACLs definido, o usuário só terá acesso ao /conversations ponto final.

Observação: O uso de caracteres curinga nos caminhos da ACL (por exemplo, /*/conversations/**) permitirá que o token JWT acesse todas as operações desse endpoint. É altamente recomendável que você utilize um controle mais granular dos caminhos da ACL, conforme ilustrado abaixo.

Caminhos granulares de ACL

Acima, vimos como conceder acesso aos usuários aos endpoints. Você também pode limitar ou conceder acesso com base em subcaminhos e métodos HTTP. Isso permite que você defina de forma muito granular quais permissões um token deve ter. Por exemplo, em seu aplicativo Voice Client SDK, você deseja que os usuários possam obter informações sobre uma conversa:

{
  "acl": {
    "paths": {
      "/*/conversations/**": {}
    }
  }
}

Os caminhos de ACL acima permitem qualquer pessoa com este token para fazer solicitações a qualquer Endpoint da Conversation API vinculado ao seu aplicativo Vonage. Isso permitirá que quem possuir esse token obtenha uma lista das conversas em andamento no seu aplicativo, crie novas conversas e muito mais. Para mitigar esse risco, você pode especificar quais caminhos, especificamente, devem ser acessíveis e quais métodos HTTP podem ser utilizados nesses caminhos.

{
  "acl": {
    "paths": {
      "/*/conversations/*": {
        "methods": [
          "GET"
        ]
      }
    }
  }
}

Esses novos caminhos de ACL permitem que qualquer pessoa com esse token apenas fazer um GET solicitação a uma conversa específica, sem subcaminhos ou operações adicionais. O que é muito mais restritivo do que antes.

Caminhos mínimos da ACL para SDKs de cliente

A seguir, estão os caminhos mínimos de ACL necessários para realizar diversas ações nos SDKs do Vonage Client. Para adicionar suporte a mais terminais de acordo com o seu caso de uso, consulte o Tabela da ACL acima e inclua-as da forma mais restritiva possível.

Isso atende ao caso de uso básico de criação de uma sessão, utilizando serverCall, reconnectCall, além de poder atender, rejeitar ou desligar uma chamada.

{
  "acl": {
    "paths": {
      "/*/sessions/**": { "methods": ["POST"] },
      "/*/conversations/*": { "methods": ["GET"] },
      "/*/conversations/*/rtc/*/answer": { "methods": ["POST"] },
      "/*/conversations/*/rtc/*/offer/*": { "methods": ["POST"]},
      "/*/conversations/*/members/*": { "methods": ["PUT", "DELETE"] },
      "/*/knocking/**": { "methods": ["POST", "DELETE"] },
      "/*/legs/**": { "methods": ["POST", "GET"] },
      "/*/v2/rtc/**": { "methods": ["POST", "GET"] }
    }
  }
}

Além do caso básico de chamada, isso permitirá que você utilize funções do SDK, tais como mute, say, etc. Isso é necessário para o SDK do Chat.

{
  "acl": {
    "paths": {
      "/*/sessions/**": { "methods": ["POST"] },
      "/*/conversations/*": { "methods": ["GET"] },
      "/*/conversations/*/events/*": { "methods": ["POST", "GET"]},
      "/*/conversations/*/rtc/*/answer": { "methods": ["POST"] },
      "/*/conversations/*/rtc/*/offer/*": { "methods": ["POST"]},
      "/*/conversations/*/members/*": { "methods": ["PUT", "DELETE"] },
      "/*/knocking/**": { "methods": ["POST", "DELETE"] },
      "/*/legs/**": { "methods": ["POST", "GET"] },
      "/*/v2/rtc/**": { "methods": ["POST", "GET"] }
    }
  }
}

Além do caso básico de chamada, isso permitirá que você utilize as funções do SDK para gerenciar tokens de notificação push. Adicione os métodos do dispositivo que deseja oferecer suporte, conforme necessário.

{
  "acl": {
    "paths": {
      "/*/sessions/**": { "methods": ["POST"] },
      "/*/conversations/*": { "methods": ["GET"] },
      "/*/conversations/*/rtc/*/answer": { "methods": ["POST"] },
      "/*/conversations/*/rtc/*/offer/*": { "methods": ["POST"]},
      "/*/conversations/*/members/*": { "methods": ["PUT", "DELETE"] },
      "/*/knocking/**": { "methods": ["POST", "DELETE"] },
      "/*/legs/**": { "methods": ["POST", "GET"] },
      "/*/v2/rtc/**": { "methods": ["POST", "GET"] },
      "/*/devices/**": { "methods": [] }
    }
  }
}

Métodos de dispositivos:

  • POST - Registrar novos dispositivos de usuário.
  • GET - Recuperar os dispositivos registrados para o usuário.
  • PUT - Atualizar os dispositivos registrados do usuário.
  • EXCLUIR - Excluir os dispositivos registrados para o usuário.

Além do caso básico de chamada, isso permitirá que você utilize as funções do SDK para obter informações sobre um usuário específico.

{
  "acl": {
    "paths": {
      "/*/sessions/**": { "methods": ["POST"] },
      "/*/conversations/*": { "methods": ["GET"] },
      "/*/conversations/*/rtc/*/answer": { "methods": ["POST"] },
      "/*/conversations/*/rtc/*/offer/*": { "methods": ["POST"]},
      "/*/conversations/*/members/*": { "methods": ["PUT", "DELETE"] },
      "/*/knocking/**": { "methods": ["POST", "DELETE"] },
      "/*/legs/**": { "methods": ["POST", "GET"] },
      "/*/v2/rtc/**": { "methods": ["POST", "GET"] },
      "/*/users/*": { "methods": ["GET"] },
    }
  }
}

Isso permite conectar-se a uma sessão com o Video SDK

{
  "acl": {
    "paths": {
      "/*/session/**": {}
    }
  }
}

Geração de JWTs usando a CLI da Vonage

O SDKs de servidor contêm métodos para gerar tokens JWT. No entanto, você pode usar o CLI da Vonage fazer isso também. Isso é particularmente útil durante os testes.

# A command with parameters
vonage jwt create `
--app-id='00000000-0000-0000-0000-000000000000' `
--private-key=./private.key `
--sub='Alice' `
--acl='{\"paths\":{\"\/*\/users\/**\":{},\"\/*\/conversations\/**\":{},\"\/*\/sessions\/**\":{},\"\/*\/devices\/**\":{},\"\/*\/push\/**\":{},\"\/*\/knocking\/**\":{},\"\/*\/legs\/**\":{}}}'

# Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2wiOnsicGF0aHMiOnsiLyovcnRjLyoqIjp7fSwiLyovdXNlcnMvKioiOnt9LCIvKi9jb252ZXJzYXRpb25zLyoqIjp7fSwiLyovc2Vzc2lvbnMvKioiOnt9LCIvKi9kZXZpY2VzLyoqIjp7fSwiLyovcHVzaC8qKiI6e30sIi8qL2tub2NraW5nLyoqIjp7fSwiLyovbGVncy8qKiI6e319fSwiZXhwIjoxNzQxMTgyMzA3LCJzdWIiOiJBbGljZSIsImp0aSI6Ijg1MTViNzk2LTA1YjktNGFkMS04MTRkLTE1NWZjZTQzZWM1YiIsImlhdCI6MTc0MTE4MTQwNywiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.BscMdDXZ1-nuLtKyPJvw9tE8E8ZjJvTPJPMT9y0TjPz4Q7qqNaqxcjglc5QPtYEjh2YpZH6btSKbUF4XTClI026Hl5_QOBlnayYo7jXwhba16fa5PeyzSf30QFGFrHbANwrQJFVCjd329SZUpwK4GxgB1gf230NhbfmkhegKezqicru2WTGCKm8kQncYliFwIEYUlcRAb2c8xcaVrn_6QNNahyeJRwGFfWpIkX0Oe-S4RDlPjoq47_gYWac9MmaetB4Dd3Yp531AuniGV5JiIShkaEwuY4Zyov4Hcmajm4Lm_UFY119la7vzHis0P7cT9pPUDe5cyPj7eT8-VhitfQ
REM A command with parameters
vonage jwt create ^
--app-id='00000000-0000-0000-0000-000000000000' ^
--private-key=./private.key ^
--sub='Alice' ^
--acl="{\"paths\":{\"\/*\/users\/**\":{},\"\/*\/conversations\/**\":{},\"\/*\/sessions\/**\":{},\"\/*\/devices\/**\":{},\"\/*\/push\/**\":{},\"\/*\/knocking\/**\":{},\"\/*\/legs\/**\":{}}}"

REM Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2wiOnsicGF0aHMiOnsiLyovcnRjLyoqIjp7fSwiLyovdXNlcnMvKioiOnt9LCIvKi9jb252ZXJzYXRpb25zLyoqIjp7fSwiLyovc2Vzc2lvbnMvKioiOnt9LCIvKi9kZXZpY2VzLyoqIjp7fSwiLyovcHVzaC8qKiI6e30sIi8qL2tub2NraW5nLyoqIjp7fSwiLyovbGVncy8qKiI6e319fSwiZXhwIjoxNzQxMTgyMzA3LCJzdWIiOiJBbGljZSIsImp0aSI6Ijg1MTViNzk2LTA1YjktNGFkMS04MTRkLTE1NWZjZTQzZWM1YiIsImlhdCI6MTc0MTE4MTQwNywiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.BscMdDXZ1-nuLtKyPJvw9tE8E8ZjJvTPJPMT9y0TjPz4Q7qqNaqxcjglc5QPtYEjh2YpZH6btSKbUF4XTClI026Hl5_QOBlnayYo7jXwhba16fa5PeyzSf30QFGFrHbANwrQJFVCjd329SZUpwK4GxgB1gf230NhbfmkhegKezqicru2WTGCKm8kQncYliFwIEYUlcRAb2c8xcaVrn_6QNNahyeJRwGFfWpIkX0Oe-S4RDlPjoq47_gYWac9MmaetB4Dd3Yp531AuniGV5JiIShkaEwuY4Zyov4Hcmajm4Lm_UFY119la7vzHis0P7cT9pPUDe5cyPj7eT8-VhitfQ
# A command with parameters vonage jwt create \ --app-id='00000000-0000-0000-0000-000000000000' \ --private-key=./private.key \ --sub='Alice' \ --acl='{"paths":{"/*/rtc/**":{},"/*/users/**":{},"/*/conversations/**":{},"/*/sessions/**":{},"/*/devices/**":{},"/*/push/**":{},"/*/knocking/**":{},"/*/legs/**":{}}}' # Will produce a token eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2wiOnsicGF0aHMiOnsiLyovcnRjLyoqIjp7fSwiLyovdXNlcnMvKioiOnt9LCIvKi9jb252ZXJzYXRpb25zLyoqIjp7fSwiLyovc2Vzc2lvbnMvKioiOnt9LCIvKi9kZXZpY2VzLyoqIjp7fSwiLyovcHVzaC8qKiI6e30sIi8qL2tub2NraW5nLyoqIjp7fSwiLyovbGVncy8qKiI6e319fSwiZXhwIjoxNzQxMTgyMzA3LCJzdWIiOiJBbGljZSIsImp0aSI6Ijg1MTViNzk2LTA1YjktNGFkMS04MTRkLTE1NWZjZTQzZWM1YiIsImlhdCI6MTc0MTE4MTQwNywiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.BscMdDXZ1-nuLtKyPJvw9tE8E8ZjJvTPJPMT9y0TjPz4Q7qqNaqxcjglc5QPtYEjh2YpZH6btSKbUF4XTClI026Hl5_QOBlnayYo7jXwhba16fa5PeyzSf30QFGFrHbANwrQJFVCjd329SZUpwK4GxgB1gf230NhbfmkhegKezqicru2WTGCKm8kQncYliFwIEYUlcRAb2c8xcaVrn_6QNNahyeJRwGFfWpIkX0Oe-S4RDlPjoq47_gYWac9MmaetB4Dd3Yp531AuniGV5JiIShkaEwuY4Zyov4Hcmajm4Lm_UFY119la7vzHis0P7cT9pPUDe5cyPj7eT8-VhitfQ

Como usar os SDKs do servidor

Espera-se que o servidor associado ao seu aplicativo Vonage gere JWTs para os SDKs de cliente. Aqui estão alguns exemplos que utilizam os SDKs de servidor da Vonage:

Versão 3 do SDK do servidor Vonage Node inclui um pacote para gerar tokens JWT. Ele também pode gerar um JWT utilizando as alegações adequadas.

const { tokenGenerate } = require('@vonage/jwt');

const privateKey = readFileSync('path/to/private.key');

const aclPaths = {
  "paths": {
    ...
  }
}

const token = tokenGenerate("aaaaaaaa-bbbb-cccc-dddd-0123456789ab", privateKey, {
      //expire in 24 hours
      exp: Math.round(new Date().getTime()/1000)+86400,
      sub: "Alice",
      acl: aclPaths,
    });

O Biblioteca JWT da Vonage para JDK pode ser usado para gerar um JWT assinado com reivindicações.

val token : String = Jwt.builder()
    .applicationId("aaaaaaaa-bbbb-cccc-dddd-0123456789ab")
    .privateKeyPath("/path/to/private.key")
    .issuedAt(ZonedDateTime.now())
    .subject("Alice")
    .addClaim("acl", mapOf(
        "paths" to mapOf(
            ...
        )
    ))
    .build()
    .generate()

O Biblioteca JWT da Vonage para JDK pode ser usado para gerar um JWT assinado com reivindicações.

String token = Jwt.builder()
    .applicationId("aaaaaaaa-bbbb-cccc-dddd-0123456789ab")
    .privateKeyPath(Paths.get("/path/to/private.key"))
    .subject("Alice")
    .issuedAt(ZonedDateTime.now())
    .expiresAt(ZonedDateTime.now().plusMinutes(20))
    .addClaim("acl", Map.of(
        "paths", Map.of(
            ...
        )
    ))
    .build()
    .generate();

O SDK do Vonage para .NET pode ser usado para gerar um JWT assinado com reivindicações.

A título de exemplo, vamos supor que queremos adicionar as seguintes reivindicações ao JWT:

var payload = new Dictionary<string, object>
{
    {"sub", "Alice"},
    {"exp", DateTimeOffset.UtcNow.AddDays(1).ToUnixTimeSeconds().ToString()},
    {
        "acl", new Dictionary<string, object>
        {
            ["paths"] = new Dictionary<string, object>
            {
                ...
            },
        }
    },
};

Existem várias maneiras de gerar um JWT.

Você pode usar o método estático CreateToken no Jwt classe:

var credentials = Credentials.FromAppIdAndPrivateKeyPath(VONAGE_APPLICATION_ID, VONAGE_APPLICATION_PRIVATE_KEY_PATH);
var token = Jwt.CreateToken(credentials.ApplicationId, credentials.ApplicationKey, payload);

Ou use o método GenerateToken em um Jwt exemplo:

// Using the credentials instance
var result = tokenGenerator.GenerateToken(credentials, payload);

// Using ApplicationId and ApplicationKey values
var result = tokenGenerator.GenerateToken(credentials.ApplicationId, credentials.ApplicationKey, payload);

A versão atual do SDK do servidor PHP da Vonage também é possível criar um JWT incluindo as reivindicações apropriadas ao usar a autenticação por par de chaves.

$keypair = new \Vonage\Client\Credentials\Keypair(
    file_get_contents('/path/to/private.key'),
    'aaaaaaaa-bbbb-cccc-dddd-0123456789ab'
);
$client = new \Vonage\Client($keypair);

$claims = [
    'acl' => [
        'paths' => [
            ...
        ]
    ]
];
$token = $client->generateJwt($claims);
$tokenString = $token->toString();

O Biblioteca JWT da Vonage para Python pode ser usado para gerar um JWT assinado com reivindicações padrão ou personalizadas.

from vonage_jwt import JwtClient

jwt_client = JwtClient(application_id, private_key)

# The `claims` field is optional and can be omitted as defaults are set

paths = { ... }
claims = {'sub': 'Alice', 'paths': paths}
vonage_jwt = jwt_client.generate_application_jwt(claims)

O Biblioteca JWT da Vonage para JDK pode ser usado para gerar um JWT assinado com reivindicações.

@builder = Vonage::JWTBuilder.new(application_id: YOUR_APPLICATION_ID, private_key: YOUR_PRIVATE_KEY)
@token = @builder.jwt.generate

( ... (o trecho foi truncado)

Caso você não esteja utilizando uma biblioteca da Vonage, consulte RFC 7519 para implementar o JWT. JWT.io oferece uma seleção de bibliotecas para gerar JWTs em várias linguagens de programação.