Introdução: por que OAuth 2.0 e JWT são necessários em aplicações web modernas?
No desenvolvimento web moderno, a transmissão segura de dados entre cliente e servidor é uma das tarefas principais. Métodos tradicionais de autenticação, como sessões baseadas em cookies, funcionam bem para aplicações monolíticas, mas tornam-se inconvenientes ao criar REST APIs, aplicações móveis ou arquitetura de microsserviços. É aqui que duas ferramentas poderosas vêm em socorro: o protocolo OAuth 2.0 e o formato de token JWT (JSON Web Token).
Neste artigo, vamos abordar os conceitos básicos de OAuth 2.0 e JWT e, em seguida, criar passo a passo um sistema simples de autorização em PHP. O artigo é voltado para desenvolvedores iniciantes, portanto, todas as explicações serão o mais simples possível e acompanhadas de exemplos práticos de código.
O que é OAuth 2.0 e como funciona?
OAuth 2.0 é um protocolo de autorização que permite que aplicações obtenham acesso limitado aos recursos de um usuário sem transmitir seu login e senha. Imagine que você queira entrar em um site usando sua conta do Google ou Facebook — isso é o funcionamento do OAuth 2.0.
Papéis principais no OAuth 2.0
- Resource Owner (Proprietário do recurso) — o usuário que possui os dados.
- Client (Cliente) — a aplicação que deseja acessar os dados do usuário.
- Authorization Server (Servidor de autorização) — o servidor que emite tokens após autenticação bem-sucedida.
- Resource Server (Servidor de recursos) — o servidor que armazena dados protegidos e verifica tokens.
Fluxo de autorização (Authorization Code Grant)
O fluxo OAuth 2.0 mais comum e seguro é o seguinte:
- O cliente redireciona o usuário para o servidor de autorização.
- O usuário faz login e concede permissão.
- O servidor de autorização retorna um authorization code para o cliente.
- O cliente troca o código por um access token (token de acesso).
- Usando o access token, o cliente acessa o servidor de recursos.
O que é JWT e por que é tão popular?
JWT (JSON Web Token) é um formato de token compacto e autossuficiente usado para transmitir informações entre partes na forma de um objeto JSON. As informações no JWT podem ser verificadas e são confiáveis, pois o token é assinado digitalmente.
Estrutura do JWT
O JWT consiste em três partes separadas por pontos:
header.payload.signature- Header (Cabeçalho) — contém o tipo de token (JWT) e o algoritmo de assinatura (por exemplo, HS256 ou RS256).
- Payload (Carga útil) — contém os dados (claims), como identificador do usuário, função, tempo de criação e expiração do token.
- Signature (Assinatura) — criada criptografando o cabeçalho e a carga útil usando uma chave secreta.
Vantagens do JWT
- Autossuficiência — todas as informações necessárias são armazenadas dentro do token, reduzindo a carga no banco de dados.
- Segurança — o token é assinado, portanto não pode ser falsificado.
- Versatilidade — funciona com qualquer linguagem de programação e plataforma.
- Escalabilidade — ideal para microsserviços e sistemas distribuídos.
Implementação prática: criando um sistema de autorização em PHP
Agora vamos para a parte mais interessante — escrever o código. Criaremos um script PHP simples que gera um token JWT e o verifica a cada requisição. Para trabalhar com JWT, usaremos a biblioteca firebase/php-jwt.