A segurança é uma das maiores preocupações nos tempos atuais. Na tecnologia, com o alto volume de dados que circulam, a cada dia mais, os padrões de segurança ganham espaço e deixam de se tornar opção para virar obrigação. Dentro disso, um dos mais adotados atualmente é o JWT ou JSON Web Token.
Este tipo de token é definido pelo documento RFC 7519. Os protocolos RFC trazem notas técnicas e organizacionais da internet, definindo conceitos, detalhes, programas e outros recursos ligados ao mundo online. Neste caso, a partir do consenso estabelecido pelos membros da Internet Engineering Taskforce (Força tarefa de Engenheiros da Internet – IETF), o RFC 7519 definiu o que é e todas as especificações de um JSON WEB Token.
Indo além da parte técnica, o JWT pode ser usado para troca de informações entre aplicações e autorização de usuários. Sua adoção em larga escala tem como principal razão a segurança.
Ele utiliza um algoritmo de hashing, que valida a integridade do token. Além disso, o valor que está dentro dele não pode ser alterado sem que o emissor tenha conhecimento. Caso isso seja feito, o token será invalidado.
Mas é importante ressaltar que, por não ser criptografado, o JSON Web Token não deve conter informações sensíveis.
Outro ponto importante é que o JWT utiliza o padrão JSON, que é bastante conhecido, tem entendimento simples e pode ser manipulado tranquilamente em qualquer linguagem.
Além disso, por ser compacto, é leve e fácil de circular entre as redes. Para ficar mais claro, quer dizer que, se utilizássemos a estrutura XML ou outra, a quantidade de dados necessária para a transmissão ou armazenamento de objetos entre as aplicações seria maior.
Isso acontece porque o JWT consegue trazer todas as informações necessárias para o seu processamento e para que as aplicações troquem dados, de forma compacta. Ou seja, a sua adoção simplifica todo o processo.
Mas afinal, como gerar um token JWT?
Antes de entender isso, é importante dizer que o JWT tem fácil implementação e o primeiro passo é compreender a sua composição. O JSON Web Token é dividido em três partes: Header, Payload e Signature. Na escrita do código, cada uma delas é separada por um ponto.
Os trechos têm estruturas e funções diferentes.
Header
{
"alg": "HS256",
"typ": "JWT"
}
Como o nome já diz, é o cabeçalho do token.
O header é um objeto JSON encodado em Base64. Ele define qual é o tipo (typ) do token (neste caso, um JWT) e qual é o algoritmo (alg) de criptografia que está sendo utilizado em sua assinatura (HMAC, SHA256 ou RSA).
Em alguns casos, o header do JWT ainda pode conter o tipo de conteúdo presente nele e, em outros, não vai informar o tipo de token.
O que não pode faltar no cabeçalho é a informação do algoritmo de criação da hash de assinaturas.
Payload
{
"sub": "1234567890",
"name": "Joao Silva",
"admin": true
}
É o corpo da JWT e é onde estão contidas as claims (informações), que podem ser de três tipos: reserved, public e private.
As reserved claims não têm utilização obrigatória, mas, em algumas situações, são recomendadas. Elas trazem informações de fácil identificação e úteis, como o horário de utilização e a expiração dos tokens.
As public claims são criadas pelo usuário e devem definir o uso da JWT e trazer informações úteis para a aplicação.
As private claims também são criadas pelo usuário, mas compartilharão informações apenas entre as aplicações que irão utilizá-las.
Signature
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
Ela é a consolidação das outras partes. É formada pelo encode do header junto ao encode do payload e mais uma palavra-chave, isso tudo codificado de acordo com o que foi especificado no cabeçalho.
A signature é responsável por garantir a integridade do token e prevenir ataques, por isso, é o item mais sensível na construção de um JWT. Um possível invasor pode até conseguir alterar o payload, colocando informações falsas, mas, se existir essa alteração, ela não será validada por conta da necessidade de preencher a chave secreta corretamente.
O conteúdo do JWT só pode ser alterado e validado por quem possui a chave correta. Este é um dos motivos para a solução ter a segurança como destaque.
Agora que você já entendeu os caminhos para criar o token JWT, é importante visualizar quais são os seus principais usos. Afinal, este padrão é, cada vez mais, utilizado por desenvolvedores em múltiplos projetos.
Quando o JWT é utilizado?
O JSON Web Token tem dois usos principais, na transmissão de informações e na parte de autorização de mecanismos de autenticação.
Começando pelo uso mais comum, o JWT é bastante útil na parte de autorizações. Isso funciona da seguinte forma: após a autenticação do login do usuário, cada requisição ao servidor terá um JSON Web Token, que permitirá a esse usuário acessar rotas, serviços e recursos liberados por meio daquele token específico.
Um dos serviços mais famosos da Apple é o “Sing In With Apple” que utiliza o JWT. Ele permite ao usuário se conectar com diversos apps (Spotify, Dropbox e Airbnb, por exemplo), por meio da AppleID. O usuário sabe o quanto esta solução da maçã facilita o dia a dia e possibilita acesso rápido a tantos aplicativos. Sem o JSON Web Token, ela não seria tão eficiente.
Além de trazer agilidade, o JWT é bastante adotado justamente por conta da segurança que proporciona. Ele é uma maneira eficiente e segura de trocar informações entre aplicações. Com as chaves pública e privada, é possível garantir que os remetentes são exatamente quem afirmam ser, o que ajuda a evitar fraudes.
Uma dessas fraudes foi justamente no serviço “Sign In With Apple”, mas a culpa não foi da falta de segurança do JWT. No caso, a falha veio da própria Apple, pois as assinaturas obtidas pelo JSON Web Token vinham de uma chave pública da empresa. A partir dessa brecha, por meio do serviço da maçã, um hacker poderia acessar qualquer conta dos usuários.
Após o incidente, que foi descoberto por um pesquisador de segurança da Índia, a Apple resolveu a falha e seguiu com o uso do JWT. Afinal, utilizado da maneira correta, o padrão é uma importante opção de segurança para evitar ações de pessoas mal intencionadas.
JWT substitui o OAuth2?
NÃO!
Afinal, o JWT não é um framework de autenticação ou autorização. Ele não define os fluxos, apenas auxilia e colabora com o processo, por meio da troca de informações que permite. Por isso, ao contrário do que muita gente pensa, não é necessário escolher entre JWT e OAuth2, pois são coisas diferentes.
O OAuth2 é um protocolo que define diversos fluxos de autorizações para aplicações. Portanto, é possível utilizar o JSON Web Token com o OAuth2, que também pode ser utilizado com outros tipos de tokens.
Como o JWT funciona na prática?
Com o token JWT gerado, a API não precisará acessar os dados de login e de senha do banco de dados para validação, a cada requisição enviada. O controle de acesso passa a ser realizado pelo token.
Dessa forma, a aplicação consome menos recursos e fica mais segura. É eficiência e segurança no trabalho de desenvolvimento e transformação digital.
A UDS é especialista em desenvolvimento de software e implementa os principais padrões de segurança nos projetos dos clientes. Aceleramos a transformação digital de marcas como Calvin Klein, DHL, YAMAHA e outras grandes empresas. Entre em contato e fale com um de nossos especialistas.