Este artigo pretende ilustrar a aplicação de autenticação JWT em RESTFUL web services em java simples (sem lib de terceiros). Na parte 2 criamos um exemplo prático
Visão Geral
JWT é uma especificação aberta (RFC 7519) usada para gerenciar autorização e troca de informações de uma maneira segura e stateless, isto é, o servidor não mantem informações relacionadas à sessão do cliente. Este é o cenário ideal no contexto mais utilizado hoje com boa parte da comunicação ocorrendo via Restful APIs, dessa forma o escalonamento horizontal dos serviços pode ocorrer sem nenhum empecilho (no que tange aos aspectos relacionados à sessão do usuário).
JWT Workflow
O diagrama de sequencia abaixo ilustra de forma geral o fluxo em serviços baseados em autenticações JWT. Um enpoint de autentição recebe as credenciais do cliente, as verifica, caso válidas, emite um token específico com prazo de validade para aquele cliente específico:
Quando for acessar os demais serviços, o cliente deve apresentar o token recebido na requisição anterior, um filtro intercepta a requisição, confere o token, e libera o acesso ao serviço se for o caso.
Segurança
Embora também possa garantir confidencialidade, desde que transmitido via HTTPS, o foco da especificação JWT é validação, ou seja, deve responder à pertgunta: os dados apresentados foram alterados indevidamente?
Para assegurar essa proposta, a RFC 7519 especifica que deve-se utilizar um Message Authentication Code (MAC) para assinar o token. MACs são reconhecidamente usados para assegurar integridade e autenticidade durante a troca de mensagens. Há vários algoritmos que implementam o MAC, o que utilizaremos será HMAC-SHA256.
Um token JWT é composto por 3 objetos JSON concatenados:
- Header: contém o algoritmo usado para gerar o MAC e o tipo de token
- Payload: pode conter qualquer informação pertinente as regras de negócio, além de elementos registrados pela RFC 7519, como iss (quem gerou o token), exp (validade), iat (quando foi gerado), sub (assunto), etc.
- Assinatura: é o resultado da aplicação do MAC ao Header e Payload concatenados.
No comments:
Post a Comment