Introdução
Com base no fato de escolherem fazer login no complemento ASAP ou não, os usuários finais podem ser classificados como usuários convidados e usuários autenticados. Aqueles que optam por não fazer login são chamados de usuários convidados e aqueles que optam por fazer login são chamados de usuários autenticados. No complemento ASAP, você pode definir qual componente e conteúdo será visível para cada tipo de usuário.
Os usuários convidados podem acessar a base de conhecimento, enviar um ticket, exibir postagens na comunidade de usuários e conversar com seu agente de suporte ao cliente.
Por outro lado, os usuários autenticados podem acessar a base de conhecimento, enviar um ticket, visualizar os tickets que eles enviaram, bater papo com seu agente de suporte ao cliente e participar ativamente da comunidade de usuários (com direitos para executar ações, como seguir um tópico , adicionando um tópico e adicionando um comentário às postagens existentes).
Por que uma JWT é necessária?
O complemento ASAP, embora fornecido pelo Zoho, não é um aplicativo independente; Ele funciona em conjunto com seu aplicativo principal, capacitando-o com a funcionalidade da Central de Ajuda. Quando os usuários finais fazem login no seu aplicativo, eles desejam acessar todos os recursos associados, incluindo a Central de Ajuda, por meio de um único login. Ter que fazer login no aplicativo com um conjunto de credenciais e precisar fazer login na Central de Ajuda com outro conjunto de credenciais - porque os serviços poderiam estar usando métodos de autenticação diferentes - incomoda os usuários finais. É aqui que o JSON Web Token (JWT) entra em ação.
A autenticação de usuário baseada em JWT é possível somente se o SSO (Single Sign-On - Logon único) por meio de autenticação remota estiver ativado no portal do Zoho Desk. O SSO garante que os usuários finais não precisem usar credenciais de login diferentes para acessar os diferentes sistemas de suporte que você possui. Se o SSO não estiver ativado, os usuários finais poderão acessar o complemento ASAP apenas como usuários convidados.
O que é JWT?
A Força-Tarefa de Engenharia da Internet, o órgão que criou o padrão JWT , define a JWT como "um meio compacto e seguro de URL de representar reivindicações a serem transferidas entre duas partes".
No contexto do complemento ASAP, o JWT é o mecanismo que verifica a autenticidade de um usuário do aplicativo principal e fornece permissão para usar o centro de ajuda orientado a ASAP com as mesmas credenciais.
Figura 1: Implementação do JWT no complemento ASAP
Pré-requisitos para ativar o JWT
Os dois componentes a seguir são essenciais para a autenticação baseada em JWT:
- Ponto final do JWT
- Segredo da JWT
Extremidade do JWT : Este é um terminal do servidor que você deve configurar antes de configurar a autenticação do JWT para o complemento ASAP. Esse terminal deve conter o código que gera o JWT e é esse terminal no qual o servidor IAM envia a solicitação GET contendo o token do usuário. Certifique-se de fornecer um URL válido para o terminal JWT ao configurar o complemento no Zoho Desk.
O terminal JWT também deve executar constantemente o programa a seguir com o segredo JWT gerado para o seu complemento.
import io.jsonwebtoken.SignatureAlgorithm;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import java.io.UnsupportedEncodingException;
public static String generateJwt (String userToken) lança o UnsupportedEncodingException {
String secretKey = ""; // Esse valor será dado quando o complemento for criado. Em seguida, substitua o valor fornecido aqui
long notBeforeMillis = System.currentTimeMillis ();
long notAfterMillis = notBeforeMillis + 300000;
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
byte [] apiKeySecretBytes = secretKey.getBytes ();
Key signingKey = new SecretKeySpec (apiKeySecretBytes, signatureAlgorithm.getJcaName ());
Construtor JwtBuilder = Jwts.builder (). SignWith (signatureAlgorithm, signingKey);
String jwt = builder.claim ("email_verified", true)
.claim ("not_after", notAfterMillis)
.claim ("not_before", notBeforeMillis)
.claim ("email", <user_email_address_from_user_token>). compact ();
return jwt;
}
- userToken é um parâmetro de entrada que considera o token do usuário recebido do aplicativo. Este parâmetro carrega os detalhes do usuário logado no aplicativo. Portanto, verifique se o token do usuário está criptografado quando é enviado do aplicativo para o servidor IAM do Zoho e, em seguida, para o endpoint do JWT. É no ponto de extremidade do JWT que o token do usuário deve ser descriptografado e verificado quanto à sua autenticidade.
- O parâmetro email retorna o endereço de email do usuário.
- O parâmetro email_verified é um parâmetro booleano que retorna se o endereço de e-mail é verificado ou não e, subsequentemente, envia o token OAuth para o complemento ASAP.
- Os not_before e not_after parâmetros definem a duração após a qual o JWT expira. O valor desses parâmetros deve estar no formato Tempo Universal Coordenado (UTC) e ser expresso em milissegundos.
- Para garantir uma segurança forte, certifique-se de que a diferença de tempo entre os parâmetros not_before e not_after não exceda 600000 milissegundos (10 minutos).
Segredo da JWT : O segredo da JWT é um código exclusivo compartilhado quando você configura o complemento ASAP no Zoho Desk. Ele é usado para assinar detalhes do usuário depois que o terminal JWT verifica o token do usuário que recebe do servidor IAM. Esta parte assinada de dados é chamada de resposta do JWT.
O segredo da JWT é compartilhado apenas uma vez - no momento do registro do complemento.Portanto, certifique-se de armazenar o segredo em um local altamente seguro e não o compartilhe com nenhuma parte não confiável.
Como funciona um JWT?
Quando um usuário tenta efetuar login no complemento ASAP usando as credenciais do aplicativo principal, o aplicativo envia seu ID de cliente, segredo de cliente e token de usuário para o servidor IAM do Zoho para verificação.
Se o servidor IAM encontrar as credenciais válidas, ele enviará o token do usuário e uma solicitação de usuário GET ao ponto de extremidade do JWT, por meio do URL de redirecionamento do JWT.
Em seguida, o ponto de extremidade do JWT verifica o token do usuário por sua autenticidade. Após esta verificação:
se o token do usuário for válido, a resposta do JWT contendo detalhes do usuário (ID de email do usuário, status de verificação de email, intervalo de tempo de login) será assinada com o segredo do JWT e enviada de volta ao servidor IAM
- se o token do usuário for inválido, a resposta do JWT será enviada de volta com o valor doparâmetro email_verified configurado como false
- Se o servidor IAM receber uma resposta válida do JWT, ele enviará o token OAuth2 que finalmente considera o usuário final como um usuário do portal de suporte técnico.
No caso do complemento ASAP, razões de segurança determinam o uso do método GET e não qualquer outro método para buscar o JWT.
Pontos-chave para lembrar
- Você pode alterar o URL do JWT a qualquer momento na página de configuração.
- O URL deve incluir um parâmetro chamado "user_token" para passar as informações do usuário para o servidor JWT.
- A resposta do JWT deve ser retornada como uma cadeia simples.
- A resposta do JWT deve conter os parâmetros email , email_verified , not_before e not_after .
- Uma mudança no tempo de servidor de aplicativo pode afetar os valores definidos para a not_before e not_after params. Portanto, certifique-se de modificar o código JWT também quando a hora do servidor de aplicativos for alterada.
- Atualmente, apenas o algoritmo HMACSHA256 é suportado para assinatura.