Passar para o conteúdo principal

JSON Web Token (JWT)

Ideal para integrar com uma base de usuários própria

Escrito por Victor Herzog

O que é JWT ?

O JSON Web Tokens é um padrão para a troca de mensagens assinadas digitalmente entre duas partes de forma segura e confiável. O padrão representa os dados pelo formato JSON e é facilmente implementado em qualquer linguagem. A JWT é um conjunto de caracteres similar ao exemplo a seguir.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Ao decodificar as informações podemos ver os dados do usuário.

{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }

Os dados são assinados criptograficamente para garantir que sua integridade foi preservada.

Saiba mais:

Configurando o Single Sign On por JWT

  1. Acesse o Painel de Administração da Plataforma. Clique em Configurações > Autenticação e Cadastro.

  2. Ative a opção Single Sign On (JWT) e clique em Salvar para gerar a Chave Secreta.

  3. Crie um endpoint em seu servidor que irá gerar a JWT.

Notion Image

Fluxo de Autenticação usando JWT

  1. O usuário se encontra em seu sistema e clica em um botão "Clube de Defensores".

  2. O botão redireciona o usuário para um endpoint em seu sistema que irá gerar a JWT.

  3. O endpoint verifica que o usuário está conectado no seu sistema e gera uma JWT com as informações do usuário.

  4. O endpoint redireciona novamente o usuário para a plataforma da Comunitive, informando a token na url através do parâmetro jwt. Exemplo: "http://defensores.empresa.com.br/#jwt=[TOKEN_JWT]"

  5. A plataforma faz o login do usuário utilizando a JWT.

Exemplo de código para gerar a JWT

O exemplo abaixo utiliza a linguagem PHP mas pode ser facilmente adaptado a outras linguagens. Antes de implementar o código abaixo, verifique a disponibilidade de pacotes específicos para gerar o JWT. Estes pacotes tendem a simplificar muito o processo.

<?php

// composer require use Firebase\JWT\JWT;

// Autentica o usuário em seu sistema
$user = $request->user();

// Gera a JWT
$domain = 'defensores.empresa.com.br'; // Domínio de Acesso

$key = "CHAVE SECRETA OBTIDA NO PAINEL DA COMUNITIVE";

$payload = [
'aud' => 'api.peepi.com.br', // Obrigatório
'iss' => $domain, // Dados do Usuário com exemplos
'name' => $user->name, // "Ricardo Faust"
'email' => $user->email, // "[email protected]"
'picture' => $user->picture, // https://bucket.empresa.com.br/ricardo.jpg"
'exp' => time() + 60*60, // Expiração em 60 min
'iat' => time()
];

$jwt = JWT::encode($payload, $key);

// Redireciona o usuário para a plataforma
redirect("https://{$domain}/#jwt={$jwt}");

?>

O campo picture é opcional e deve ser uma URL com a imagem do usuário, preferencialmente em formato JPG com dimensão 320x320.

Respondeu à sua pergunta?