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
Acesse o Painel de Administração da Plataforma. Clique em Configurações > Autenticação e Cadastro.
Ative a opção Single Sign On (JWT) e clique em Salvar para gerar a Chave Secreta.
Crie um endpoint em seu servidor que irá gerar a JWT.
Fluxo de Autenticação usando JWT
O usuário se encontra em seu sistema e clica em um botão "Clube de Defensores".
O botão redireciona o usuário para um endpoint em seu sistema que irá gerar a JWT.
O endpoint verifica que o usuário está conectado no seu sistema e gera uma JWT com as informações do usuário.
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]"
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.

