OAuth 2.0 e autorização JWT em Go: guia completo para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que OAuth 2.0 e JWT em Go?



O desenvolvimento web moderno é impensável sem autenticação e autorização seguras. Se você está escrevendo sua primeira API, microsserviço ou aplicação web em Go (Golang), mais cedo ou mais tarde enfrentará a necessidade de proteger os dados dos usuários. Dois padrões — OAuth 2.0 e JWT (JSON Web Token) — tornaram-se o padrão ouro nesta área.



Neste artigo, vamos analisar como funcionam OAuth 2.0 e JWT, e escrever uma implementação simples, mas funcional, em Go. Você aprenderá como emitir tokens de acesso, verificá-los e proteger seus endpoints. O artigo é voltado para desenvolvedores iniciantes familiarizados com os fundamentos de Go e HTTP.



O que são OAuth 2.0 e JWT? Em palavras simples



OAuth 2.0 — protocolo de acesso delegado



OAuth 2.0 não é uma biblioteca nem uma função, mas um protocolo. Imagine que você queira fazer login em um site através do Google. OAuth 2.0 permite que o site obtenha do Google acesso limitado aos seus dados (por exemplo, email) sem que você precise fornecer sua senha do Google. Isso é chamado de "acesso delegado".



Principais papéis no OAuth 2.0:

  • Resource Owner — o usuário (você).
  • Client — a aplicação que deseja obter acesso (nosso site).
  • Authorization Server — o servidor que emite tokens (Google).
  • Resource Server — o servidor com os dados do usuário (API do Google).


JWT — formato de token



JWT (JSON Web Token) é uma forma compacta e autossuficiente de transmitir informações entre partes na forma de um objeto JSON. Ele consiste em três partes separadas por pontos:



  • Header — tipo de token e algoritmo de assinatura (ex.: HS256).
  • Payload — dados (claims): ID do usuário, papel, prazo de validade.
  • Signature — assinatura que garante que o token não foi alterado.


JWT é frequentemente usado como Access Token no OAuth 2.0. O servidor assina o token com uma chave secreta, e o cliente o envia no cabeçalho Authorization: Bearer <token>.



Prática: implementação de autorização JWT em Go



Vamos escrever um pequeno servidor HTTP em Go que emitirá tokens JWT e os verificará em rotas protegidas. Para trabalhar com JWT, usaremos a biblioteca popular github.com/golang-jwt/jwt/v5.



Passo 1: Instalação de dependências e estrutura do projeto



Crie um novo módulo e instale a biblioteca:



go mod init auth-examplego get github.com/golang-jwt/jwt/v5go get golang.org/x/crypto


A estrutura de arquivos será simples:



  • main.go — ponto de entrada e rotas.
  • auth.go — lógica de criação e verificação de JWT.
  • handlers.go — manipuladores HTTP.


Passo 2: Criação do token JWT



Criaremos o arquivo auth.go. Aqui definiremos a chave secreta (em um projeto real, armazene-a em .env) e uma função para gerar o token.



package main

import ( "time" "github.com/golang-jwt/jwt/v5")

var jwtSecret = []byte("your-secret-key-here")

type Claims struct { UserID int `json:"user_id"` Username string `json:"username"` jwt.RegisteredClaims}

func GenerateToken(userID int, username string) (string, error) { claims := Claims{ UserID: userID, Username: username, RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)), IssuedAt: jwt.NewNumericDate(time.Now()), Issuer: "auth-example", }, }

token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString(jwtSecret)}
\

Blogs

Book Recommendations