O provedor de autenticação JWT personalizado permite aos usuários autenticar com um sistema de autenticação independente do ChatCase. O sistema externo deve devolver um sinal JSON
O provedor de autenticação JWT personalizado permite aos usuários autenticar com um sistema de autenticação independente do ChatCase. O sistema externo deve devolver um sinal JSON Web Token que contém um valor ID único para o usuário autenticado.
O ChatCase usa o JWT para identificar os usuários da sua aplicação e autenticar seus pedidos, mas não impõe quaisquer restrições aos requisitos do sistema de autenticação externo ou aos métodos de autenticação.
Para criar um JWT Personalizado Token você deve gerar um Project Shared Secret como descrito abaixo.
NOTA: Nós fornecemos um tutorial completo sobre autenticação personalizada.
Um Projeto Shared Secret é uma configuração de segurança, destinada a ser gerada, copiada e colada em uma comunicação com sua equipe de engenharia, ou diretamente em sua base de código, em uma única sessão. Não deve ser inserido em um navegador.
Para gerar o segredo compartilhado necessário para autenticação personalizada você precisa:

Nota:O segredo compartilhado é destinado a permanecer seguro. Como resultado, só aparecerá na íntegra uma vez. Se você não tiver acesso ao segredo compartilhado e precisar do segredo completo para criar seu token, você pode redefinir o segredo clicando no botão "Gerar". Regenerar um novo segredo compartilhado irá revogar o token anterior. Se você tem preocupações o segredo compartilhado foi comprometido, você deve regenerar um novo. Se você precisar girar as chaves, você deve agendar quando o Chat estiver offline porque regenerar o segredo faz com que os visitantes sejam desconectados do widget.
Para criar um token JWT você deve definir os seguintes campos obrigatórios do objeto usuário :
<YOUR_PROJECT_ID>_( exemplo: 5e5f4e220b28440012117be4\ 12345678 )userexternal* aud. Os JWTs descrevem seu público na alegação de aud. Para autenticação personalizada deve serhttps://chatcase.com/projects/<YOUR_PROJECT_ID>se usa a versão em nuvem do ChatCase ou se a instala no local.Campos opcionais:
O sistema de autenticação externa deve criar o JWT assinando o objeto do usuário com o código Project Shared Secret.
Exemplo do objeto do usuário:
{"_id": "5e5f4e220b28440012117be4_12345678", "firstname":"Andrea", "lastname":"Leo", "email": "redacted@example.invalid", "attributes": {"attribute1":"value"}, "sub": "userexternal", "aud": "https://chatcase.com/projects/5c81593adf767b0017d1aa68"}
`$([Environment]::NewLine)
# # Gerar JWT Token Server Side
Encontre o modelo abaixo que se adapta às suas necessidades de idioma. Personalize a amostra conforme necessário, certificando-se de substituir o #{detalhes} por suas próprias informações.
Se nenhuma destas amostras corresponde às suas necessidades, o JWT tem uma lista mais extensa de [bibliotecas JWT](https://jwt.io/#libraries-io) para explorar.
# # NodeJS
Instalar [jsonwebtoken] (https://github.com/auth0/node-jsonwebtoken):
npm install jsonwebtoken --save-dev `$([Environment]::NewLine) Em seguida, gerar um token usando o segredo compartilhado:
var jwt = require('jsonwebtoken');
var payload = {
_id: '#{customerIdentifier}',
firstname: '#{customerFirstname}',
lastname: '#{customerLastname}',
email: '#{customerEmail}',
sub: 'userexternal',
aud: 'https://chatcase.com/projects/#{YOUR_PROJECT_ID}',
};
var token = jwt.sign(payload, '#{yourProjectSharedSecret}');
`$([Environment]::NewLine)
Você pode encontrar um exemplo personalizado de autenticação Jwt do NodeJs [aqui](https://github.com/ChatCase/chatcase-custom-jwt-authentication-example).
PHP
Baixar [PHP-JWT] (https://github.com/firebase/php-jwt):
composer require firebase/php-jwt `$([Environment]::NewLine) Gerar um token usando o segredo compartilhado:
$payload = {
'_id' => '#{customerIdentifier}' ,
'firstname' => '#{customerFirstname}',
'lastname' => '#{customerLastname}',
'email' => '#{customerEmail}',
'sub' => 'userexternal',
'aud' => 'https://chatcase.com/projects/#{YOUR_PROJECT_ID}'
};
$token = JWT::encode($payload, '#{yourProjectSharedSecret}');
```java
Autenticação com Java é coberta com um exemplo simples de Java (Maven) no repositório público [ChatCaseJavaJWTSign](https://github.com/ChatCase/ChatCaseJavaJWTSign)
Usamos a [biblioteca JWT] (https://github.com/jwtk/jjwt) para implementar a operação de sinal ChatCase JWT.
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; long nowMillis = System.currentTimeMillis(); Date now = new Date(nowMillis); byte[] apiKeySecretBytes; apiKeySecretBytes = SECRET_KEY.getBytes(); Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName()); JwtBuilder builder = Jwts.builder().setId(id) .setIssuedAt(now) .setSubject(subject) .setIssuer(issuer) .claim("firstname", firstname) .claim("lastname", lastname) .claim("email", email) .signWith(signingKey, signatureAlgorithm);
return builder.compact(); `$([Environment]::NewLine) Por favor, consulte o pedido acima mencionado para mais deátis.
Você pode verificar o token JWT usando jwt.io seguindo estes passos:
![imagem] (https://github.com/ChatCase/chatcase-docs/assets/9378770/3bb5e170-b017-4a33-9526-a01dbc21dd70)
Veja como configurar autenticação personalizada para o widget usando o token JWT.